我想创建一个像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>
答案 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));