我很难找到这个问题的傻瓜,但我认为之前有人问过......
如果我向Set
添加三个项目:
var s = new Set();
undefined
s.add(1); s.add(2); s.add(3);
Set(3) {1, 2, 3}
...如何查找项目的索引?
indexOf
没有Set
方法,我不确定迭代Set是否是最好的方法。我尝试过使用forEach
API,但此函数既不能break
也不能return
:
if (s.size < cells.length) {
var count = 0;
s.forEach(function (value) {
if (cell.id.slice(0, -5) == value) {
break; //return fails here too...
}
count ++;
});
return count;
}
答案 0 :(得分:8)
集合的目的不是给出一个订单号,但是如果你需要一个,那么实用的解决方案就是暂时把它变成一个带有spread syntax的数组:
count = [...s].indexOf(cell.id.slice(0, -5));
如果由于某种原因您更喜欢循环播放,请使用some
代替forEach
:
[...s].some(function (value) {
if (cell.id.slice(0, -5) == value) {
return true; // this will stop the iteration
}
count ++;
});
或者为什么不使用ES6 for of
循环:
for (const value of s) {
if (cell.id.slice(0, -5) == value) {
break; // this will stop the iteration
}
count ++;
}
注意:虽然不鼓励使用旧式for ... in
循环用于数组,但这不适用于for ... of
循环。
答案 1 :(得分:0)
@JacobIRR是散布运算符(...),它所做的就是将集合中的所有元素复制到数组中,例如
const numbers = [1, 2, 3];
console.log(sum(...numbers));
//预期输出:6
console.log(sum.apply(null, numbers));
//预期输出:6