找到满足条件的数组的所有索引的简单方法?

时间:2016-09-23 12:02:52

标签: javascript ecmascript-6

说,我有一个数组[11,12,13,14,15,16],我希望获得大于13的所有元素索引。

我可以这么做:

myArray.map((x, idx) => [x, idx]).filter(x => x[0] > 13).map(x => x[1])

>>> [3, 4, 5]

有没有更简单的方法呢?

5 个答案:

答案 0 :(得分:4)

也许这可以更清楚:

[11,12,13,14,15,16].reduce((r, c, i) => c > 13 ? r.concat(i) : r, []);
// [3, 4, 5]

答案 1 :(得分:1)

您可以使用地图并过滤值。



var data = [11, 12, 13, 14, 15, 16],
    result = data.map((a, i) => a > 13 && i).filter(a => a !== false);

console.log(result);




答案 2 :(得分:1)

看起来已经很不错了。 x使用中的不一致使得代码的可读性降低,这就是解构有用的地方。

Array.prototype.entries()myArray.map((x, idx) => [idx, x])的快捷方式:

[...myArray.entries()]
.filter(([, x]) => x > 13)
.map(([idx]) => idx)

答案 3 :(得分:0)

我不确定它是否更容易,但是您可以在一个函数中使用reduce(或者如果您愿意,可以使用forEach):

[11,12,13,14,15,16].reduce((a,x,i) => {
  if (x > 13) { a.push(i); }
  return a;
}, []);

答案 4 :(得分:0)

var out = [];
array.forEach((v, idx) => {
  if(v > 13){
    out.push(idx);
  }
})