javascript - ReactJS:如何防止 array.push 中的重复值?

标签 javascript arrays reactjs ecmascript-6 array-push

在选择框中选择一个选项时,其余选项将变为多个值。如何防止出现重复值?

import Select from 'react-select';
const dataOptions = []; 
class App extends React.Component {
    constructor(props) {
        super(props);
        this.data = [];
        this.getData();
    }
    getData = () => { api.request({url: `/getdata`}).then(res => res.map(el => this.data[el.id] = el.name)) }

    addData = () => {
        const { selectedId } = this.state;
        var datas = this.data;
        console.log(datas);
        datas.map((name, index) => {
            if (!dataOptions.includes(name)) {
                console.log('b4 push:', dataOptions)
                dataOptions.push({ value: index, label: name });
                console.log('aftr push:', dataOptions)
            }
        });
        return (
            <Select options={dataOptions}
            isMulti
            />
        );
    }
}

此语法中出现问题:

datas.map((name, index) => {
  if (!dataOptions.includes(name)) {
       dataOptions.push({ value: index, label: name });
  }
}); 

控制台结果

[ "data-1", "data-2", "data-3"]

b4 push: [
  {value: 1, label: "data-1"}
  {value: 2, label: "data-2"}
  {value: 3, label: "data-3"}
]

aftr push: [
  {value: 1, label: "data-1"}
  {value: 2, label: "data-2"}
  {value: 3, label: "data-3"}
]

P.S:在推后,我已经从下拉列表中选择了第一个选项;因此结果 if 不应该显示在数组值中。

提前致谢...!

最佳答案

解构语法应如下所示

datas.map(({name, index}) => {
      if (!dataOptions.includes(name)) {
           dataOptions.push({ value: index, label: name });
      }
    }); 

此外,您不需要外部数组将数据推送到 map 函数内,因为该函数默认返回一个数组,您可以像下面这样简单地执行操作

 let expected_data=datas.map(({name, index}) => {
              if (!dataOptions.includes(name)) {
                 return  { value: index, label: name };// return a value
              }
            }); 

expected_data将包含您操作后需要的数据

查看片段-

let data = [{
  "name": 1,
  "index": 2
}, {
  "name": 11,
  "index": 21
}]

console.log(data.map(({
  index,
  name
}) => {

  return {
    value: index,
    label: name
  }

}))

您最好使用Array.some()来查找您想要的内容

 datas.map((name,index) => { // here index is the iterator
                if(!dataOptions.some(({value,label})=>label==name  ))
            {
                   dataOptions.push({ value: index, label: name });
              }
            }); 

关于javascript - ReactJS:如何防止 array.push 中的重复值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58800392/

相关文章:

javascript - 当对象推送到数组时如何保持键的顺序

arrays - 复杂度为 O(n) 的数组中第二高的数

arrays - Matlab:基于索引对矩阵中的值进行矢量化分配

Javascript/jQuery Id 检查以驱动编号功能并进行验证

javascript - 在 JavaScript 中将 JSON 字符串转换为多步形式的数组?

reactjs - 无法从上下文中解构对象的属性

reactjs - 条件 Prop 的 TypeScript 实用程序类型(基于类型中其他属性的输入值)

reactjs - 无法访问 docker 镜像中的React应用程序

javascript - 我怎样才能让我的下拉选择通过它们的值改变我的总数,但除非被选择否则不被计算

javascript - 自动从 html 数据定义数组