gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 00:28:27 24 4
gpt4 key购买 nike

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

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com