获取Javascript Set中的项目索引

时间:2017-06-19 20:52:40

标签: javascript

我很难找到这个问题的傻瓜,但我认为之前有人问过......

如果我向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;
  }

2 个答案:

答案 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