我正在try 根据复选框中的选定/选中值填充array.

const cars = ["Ford", "Chevy", "Honda", "Toyota"];
const phones = ["iPhone", "Samsung", "Nokia", "Sony"];
const laptops = ["Mac", "Dell", "HP", "Acer"];

以及另一个包含复选框值的array.

const names = ["cars", "phones", "laptops"];

我的目标是将与选中值同名的数组推送到一个数组(比如selectedProductArray).

const selectedProductArray = [];
  const selectedProductInfo = nameArr.includes("phones")
    ? selectedProductArray.concat(phones)
    : nameArr.includes("laptops")
    ? selectedProductArray.concat(laptops)
    : selectedProductArray.concat(cars);


我正在try 根据复选框 Select 多个数组来推送到数组

["Ford", "Chevy", "Honda", "Toyota", "iPhone", "Samsung", "Nokia", "Sony];

全部代码和demo sandbox link

import * as React from "react";
import OutlinedInput from "@mui/material/OutlinedInput";
import InputLabel from "@mui/material/InputLabel";
import MenuItem from "@mui/material/MenuItem";
import FormControl from "@mui/material/FormControl";
import ListItemText from "@mui/material/ListItemText";
import Select, { SelectChangeEvent } from "@mui/material/Select";
import Checkbox from "@mui/material/Checkbox";

const ITEM_HEIGHT = 48;
const ITEM_PADDING_TOP = 8;
const MenuProps = {
  PaperProps: {
    style: {
      maxHeight: ITEM_HEIGHT * 4.5 + ITEM_PADDING_TOP,
      width: 250
    }
  }
};

const cars = ["Ford", "Chevy", "Honda", "Toyota"];
const phones = ["iPhone", "Samsung", "Nokia", "Sony"];
const laptops = ["Mac", "Dell", "HP", "Acer"];

const names = ["cars", "phones", "laptops"];

export default function MultipleSelectCheckmarks() {
  const [nameArr, setNameArr] = React.useState<string[]>([]);

  const handleChange = (event: SelectChangeEvent<typeof nameArr>) => {
    const {
      target: { value }
    } = event;
    setNameArr(typeof value === "string" ? value.split(",") : value);
  };

  const selectedProductArray = [];
  const selectedProductInfo = nameArr.includes("phones")
    ? selectedProductArray.concat(phones)
    : nameArr.includes("laptops")
    ? selectedProductArray.concat(laptops)
    : selectedProductArray.concat(cars);
  console.log("selectedProductInfo", selectedProductInfo);
  console.log("selectedProductArray", selectedProductArray);

  return (
    <div>
      <FormControl sx={{ m: 1, width: 300 }}>
        <InputLabel id="demo-multiple-checkbox-label">Tag</InputLabel>
        <Select
          labelId="demo-multiple-checkbox-label"
          id="demo-multiple-checkbox"
          multiple
          value={nameArr}
          onChange={handleChange}
          input={<OutlinedInput label="Tag" />}
          renderValue={(selected) => selected.join(", ")}
          MenuProps={MenuProps}
        >
          {names.map((name) => (
            <MenuItem key={name} value={name}>
              <Checkbox checked={nameArr.indexOf(name) > -1} />
              <ListItemText primary={name} />
            </MenuItem>
          ))}
        </Select>
      </FormControl>
    </div>
  );
}

任何帮助都将不胜感激

推荐答案

此答案旨在帮助OP实现以下目标,

例如,如果复选框中有选中的carsphones个值

["Ford", "Chevy", "Honda", "Toyota", "iPhone", "Samsung", "Nokia", "Sony];

为此,请进行以下更改:

首先,像这样声明一个对象:

  const nameArrayOfObj = {
      cars: ["Ford", "Chevy", "Honda", "Toyota"],
      phones: ["iPhone", "Samsung", "Nokia", "Sony"],
      laptops: ["Mac", "Dell", "HP", "Acer"]
  };

接下来,在最外面/最上面的<div>下添加以下行:

{JSON.stringify(nameArr.flatMap(name => nameArrayOfObj[name]))} <br/><br/><br/>

现在,当用户 Select 复选框carsphoneslaptops时,这些数组中的对应项将呈现在Select下拉列表的正上方.

Image from codesandbox demo

Javascript相关问答推荐

如何指定1条记录1个表?

Express.js:使用Passport.js实现基于角色的身份验证时出现太多重定向问题

如何解决这个未能在响应上执行json:body stream已读问题?

使用axios.获取实时服务器时的404响应

没有输出到带有chrome.Devtools扩展的控制台

如何用显示网格平滑地将元素从一个地方移动到另一个地方?

如何解决chrome—extension代码中的错误,它会实时覆盖google—meet的面部图像?'

在JavaScript中声明自定义内置元素不起作用

将旋转的矩形zoom 到覆盖它所需的最小尺寸&S容器

如何从网站www.example.com获取表与Cheerio谷歌应用程序脚本

Angular 订阅部分相互依赖并返回数组多个异步Http调用

编辑文本无响应.onClick(扩展脚本)

rxjs插入延迟数据

Use Location位置成员在HashRouter内为空

传递方法VS泛型对象VS事件特定对象

将Auth0用户对象存储在nextjs类型脚本的Reaction上下文中

Socket.IO在刷新页面时执行函数两次

如何让SVG图标在被点击和访问后改变 colored颜色 ,并在被访问后取消点击时恢复到原来的 colored颜色 ?

将Singleton实例设置为未定义后的Angular 变量引用持久性行为

脚本语法错误只是一个字符串,而不是一个对象?