我有一个简单的例子,将唯一值推送到数组中.它看起来像这样:
this.items = [];
add(item) {
if(this.items.indexOf(item) > -1) {
this.items.push(item);
console.log(this.items);
}
}
Run Code Online (Sandbox Code Playgroud)
看起来挺直截了当,对吧?不,看起来如此.它不会添加任何值.我确信这是我身上某种愚蠢的错误,但我似乎无法找到它.
Jag*_*row 65
是的小错误
if(this.items.indexOf(item) === -1) {
this.items.push(item);
console.log(this.items);
}
Run Code Online (Sandbox Code Playgroud)
小智 25
您可以使用ES6中的Set结构来使代码更快,更易读:
// Create Set
this.items = new Set();
add(item) {
this.items.add(item);
// Set to array
console.log([...this.items]);
}
Run Code Online (Sandbox Code Playgroud)
lac*_*dan 13
[1, 2, 3].includes(2); // true
[1, 2, 3].includes(4); // false
[1, 2, 3].includes(3, 3); // false
[1, 2, 3].includes(3, -1); // true
[1, 2, NaN].includes(NaN); // true
Run Code Online (Sandbox Code Playgroud)
所以像
const array = [1, 3];
if (!array.includes(2))
array.push(2);
Run Code Online (Sandbox Code Playgroud)
但是,请注意页面底部的浏览器兼容性。
小智 12
使用集
this.items = new Set();
this.items.add(1);
this.items.add(2);
this.items.add(1);
this.items.add(2);
console.log(Array.from(this.items)); // [1, 2]
Run Code Online (Sandbox Code Playgroud)
你的逻辑是,“如果这个项目已经存在,那就添加它。” 应该是相反的。
将其更改为...
if (this.items.indexOf(item) == -1) {
this.items.push(item);
}
Run Code Online (Sandbox Code Playgroud)
如果您使用Lodash,请查看_.union功能:
let items = [];
items = _.union([item], items)
Run Code Online (Sandbox Code Playgroud)
小智 6
如果您正在寻找一个班轮
对于基元
(this.items.indexOf(item) === -1) && this.items.push(item);
Run Code Online (Sandbox Code Playgroud)
对于对象
this.items.findIndex((item: ItemType) => item.var === checkValue) === -1 && this.items.push(item);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
54448 次 |
| 最近记录: |