反应多选择下拉

时间:2020-10-12 23:55:26

标签: javascript arrays reactjs

尝试填充React-multi-select-dropdown的选项数组

   this.state.users.map((user) => {
      if (!this.state.options.includes(user.badgeId))
        this.state.options.push({ name: user.badgeId, id: user._id });
      return this.state.options;
    });

在options数组中获取相同值的多个值。

    <Multiselect
      options={this.state.options} // Options to display in the dropdown
      //isObject={false}
      onSelect={this.onSelect} // Function will trigger on select event
      // onRemove={this.onRemove} // Function will trigger on remove event
      displayValue='name' // Property name to display in the dropdown options
    />

一旦选择并提交表单,所选的用户。badgeId将需要位于其自己的数组中。

2 个答案:

答案 0 :(得分:1)

问题:您的代码检查数组user.badgeId中的值options是否不是。该数组始终返回true,因为此类数组中填充了以下对象:{ name: user.badgeId, id: user._id }

一个简单的例子:

const myArray = [{a: 1, b:'banana'}, {a: 2, b:'banana'}]

myArray.includes(1) // false

相反,您可以使用.find()获取具有name === badgeId的数组中的对象。

find()返回满足提供的测试功能的第一个元素的值。如果未找到,则为undefined

现在,我们可以搜索数组中的和元素,如果找到它,则可以执行某些操作。像这样:

const findResult = this.state.options.find((obj) => obj.name === user.badgeId);
if (typeof findResult === "undefined")
  // Do something

我对这些单词不太满意,因此如果感到困惑,请随时澄清。或者您可以查看this answer是否有帮助

答案 1 :(得分:0)

const b = this.state.users.map((obj, index) => ({
  name: obj.username,
  id: obj.badgeId,
}));