【发布时间】:2021-03-10 01:46:45
【问题描述】:
例如,我只想得到两个满足过滤条件的项目。
filter() 然后 slice(2) 将迭代所有的项目,这真的很浪费,而 find() 只能返回一个项目。
有没有办法指定满足过滤条件的返回商品的数量?除了自己写for循环。
【问题讨论】:
-
使用forEach,得到两个项目时抛出错误。
标签: javascript jquery reactjs filter ecma
例如,我只想得到两个满足过滤条件的项目。
filter() 然后 slice(2) 将迭代所有的项目,这真的很浪费,而 find() 只能返回一个项目。
有没有办法指定满足过滤条件的返回商品的数量?除了自己写for循环。
【问题讨论】:
标签: javascript jquery reactjs filter ecma
reduce 应该可以完成这项工作,请考虑以下示例
[1, 2, 3, 4].reduce((acc, n) => n > 2 ? [...acc, n] : acc, []) // results [3, 4]
【讨论】:
filter() 和 map() 相同的“问题”,因为它还会遍历 OP 视为“”的整个数组浪费。”
你可以循环和中断。您可以创建一个辅助方法来执行此操作:
const found = [];
for (let i = 0; i < sourceArray.length; i++) {
if (whatever) found.push(sourceArray[i];
if (found.length >= 2) break;
}
【讨论】:
我会编写一个辅助函数来接收您的数组、一个计数和一个谓词函数,类似于 array.filter 的工作方式。如果应包含该项目,则返回 true。
function filterCount(array, count, predicate) {
const elements = [];
for (const el in array) {
if (predicate(el)) {
elements.push(el);
}
if (elements.length >= count) {
break;
}
}
return elements;
}
const test = [1,2,3,4,5,6,7,8,9,10];
const onlyTwo = filterCount(test, 2, (number) => number >= 5);
console.log(onlyTwo)
【讨论】: