提问人:user7212232 提问时间:11/16/2023 最后编辑:derpirscheruser7212232 更新时间:11/16/2023 访问量:31
筛选数组返回的不是数组的元素,而是索引号
Filter array returning not the elements of the array but the index numbers
问:
let class_required = new Array("bad",
"bad", "good", "bad",
"good", "bad", "bad",
"bad", "good");
我只想返回“坏”的元素,但我希望返回索引号,希望使用 .filter 或 .map 等还不错
答:
0赞
derpirscher
11/16/2023
#1
您可以结合使用 Array.map 和 Array.filter
和的问题是,对于您的用例,您必须同时使用两者,因此迭代数组两次,因为map
filter
map
只能转换值,但不能跳过它们。即,结果将始终包含原始数组中所有值的转换,而不仅仅是您需要的值。filter
只能跳过值,而不能转换值。即过滤后的数组只能包含值,而不能包含索引。
您还必须按正确的顺序应用它们,因为如果您先进行过滤(因此要转换的值会更少),索引将是错误的。
let class_required = new Array("bad",
"bad", "good", "bad",
"good", "bad", "bad",
"bad", "good");
let filtered = class_required.map((x,i) => x === "bad" ? i : -1)
.filter(x => x >=0)
console.log(filtered);
或者你可以使用Array.reduce
,它允许你将输入数组转换为你想要的任何数据结构。
let class_required = new Array("bad",
"bad", "good", "bad",
"good", "bad", "bad",
"bad", "good");
let filtered = class_required.reduce((a,c,i) => {
if (c === "bad") a.push(i);
return a;
}, []);
console.log(filtered);
当然,您也可以使用简单的for循环(实际上与上述循环的功能等价)reduce
let class_required = new Array("bad",
"bad", "good", "bad",
"good", "bad", "bad",
"bad", "good");
let filtered = [];
for (let i = 0; i < class_required.length; i++) {
if (class_required[i] === "bad") {
filtered.push(i);
}
}
console.log(filtered);
评论