我想确保我不能将重复的值以React状态推入数组。重复的值仍然在数组中。
我尝试使用.includes
,但是它不起作用。
const categoryCheck = (category) => {
let categories = [...this.state.categories]
if (this.state.categories === undefined) {
return
}
console.log(categories, category)
console.log(!categories.includes(category))
if (!categories.includes(category) === false) {
categories.push(category)
console.log('new category', categories)
}
}
输入:'cat'
预期结果:['cat']
实际结果:['cat', 'cat']
更新: 这是我的功能,这就是我的称呼方式。感谢您的所有帮助!
uniqueCategories = category => {
//makes sure that there are no duplicate categories in array
if (category === undefined) {
return;
}
let categories = new Set(category);
categories = Array.from(categories);
console.log(categories);
return categories;
};
我在另一个这样的函数中调用它:
this.setState({
categories: this.uniqueCategories([
...this.state.categories,
categoryInput
])
答案 0 :(得分:3)
a = [1,2,4,2,3,4,1]
s = set([1,2])
t = list(map(lambda a: a in s, a))
是双重否定。删除>>> np.isin(a,s)
array([ True, True, False, True, False, False, True])
。
另外,请考虑使用Set
来确保唯一性( if (!categories.includes(category) === false) {
必须线性搜索数组,而在=== false
中查找成员资格是一项恒定时间操作)。>
这是一个使用.includes
的玩具示例,您可以将其插入应用程序:
Set
Set
答案 1 :(得分:1)
您可以在ES6中使用Set
const categoryCheck = (category) => {
if (this.state.categories === undefined) {
return
}
let categories = new Set(this.state.categories)
categories.add(category)
this.setState({ categories: Array.from(categories) })
}
答案 2 :(得分:0)
您的逻辑相反:
if (!categories.includes(category) === false) {...}
如果该项在数组中不是,则将返回true
。只需使用此:
if (!categories.includes(category)) {...}