如何在Javascript中获取满足条件的所有数组索引?

时间:2017-05-06 22:32:22

标签: javascript arrays

我想创建一个像Array.prototype.findIndex一样的方法,但它返回符合条件的所有索引:

  Array.prototype.which = function(condition) {
    let result = this.reduce((acc, x, i, arr) => {
      if (condition) { acc.push(i) }
      return acc
    }, [])
    return result
  }

所以我可以这样做:

  [ 'a', null, 'b' ].which(x => x !== null) // [0, 2]

这不起作用,因为我不知道如何将函数调用中的x参数与x函数中的which值相关联。 / p>

3 个答案:

答案 0 :(得分:4)

你需要调用谓词:

  Array.prototype.which = function(predicate) {
    let result = this.reduce((acc, x, i, arr) => {
      if (predicate(x)) { acc.push(i) }
      return acc
    }, [])
    return result
  }

答案 1 :(得分:1)

老式的for-loop方法:

ls /usr/bin/python*

虽然使用for和while更容易出错,但由于函数调用较少,它们有时会提供性能提升。

答案 2 :(得分:1)

我更喜欢Array#forEach

Array.prototype.which = function(condition) {
    let result = [];
    this.forEach((v,i) => condition(v) ? result.push(i) : null);
    return result;
}

console.log([1,2,3,4,5,6].which(v => v > 3));