我试图从Array.filter
方法中返回满足特定条件的项的索引,但我仍然得到一组实际值而不是索引强烈的>我想要的价值观。
示例:
var seq = [3, 4, 1, 2, 1];
seq.filter((curr, index) => {
if (seq[index + 1] < seq[index]) {
return index;
}
});
// returns [4, 2]
// want to return [1, 3] (the indexes of 4 & 2)
我可以使用更有效的方法吗?我试图避免使用for循环。感谢。
答案 0 :(得分:3)
您可以在此使用reduce
var seq = [3, 4, 1, 2, 1];
var result = seq.reduce((ar, curr, index) => {
if (seq[index + 1] < seq[index]) ar.push(index);
return ar;
}, []);
console.log(result)
&#13;
答案 1 :(得分:1)
您可以使用带有索引数组的过滤器和返回
的正确测试
var seq = [3, 4, 1, 2, 1],
result = seq.map(function (_, i) { return i; }).filter(function (i) {
return seq[i - 1] < seq[i];
});
console.log(result);
&#13;
更好的解决方案是使用forEach
的循环
var seq = [3, 4, 1, 2, 1],
result = [];
seq.forEach(function (a, i) {
seq[i - 1] < a && this.push(i);
}, result);
console.log(result);
&#13;
答案 2 :(得分:0)
在这种情况下使用for循环并不是一个坏主意。我个人认为它更清洁,更有效率。
let seq = [3, 4, 1, 2, 1];
for (let i = 0; i < seq.length; i++) {
if (seq[i + 1] < seq[i]) {
continue;
}
seq.splice(i, 1);
}