我想通过保留相同数组而不创建新数组来过滤数组。
带有Array.filter()
:
getFiltersConfig() {
return this.config.filter((topLevelConfig) => topLevelConfig.name !== 'origin')
}
通过按值过滤而不返回新数组来获得相同结果的最佳方法是什么?
答案 0 :(得分:1)
不确定为什么要进行突变,但是如果您确实想进行突变,也许可以将其分配回自己?
let arr = ['a','b','a'];
arr = arr.filter(x => x !== 'a');
console.log(arr)
答案 1 :(得分:1)
为了完整起见,我认为显示变异数组变体可能很有意义。
下面是一个带有简单功能mutationFilter
的代码段,它将直接过滤数组,请注意,在此函数中循环是相反的,这是一种删除带有变异数组的项目的技术。
还进行了一些测试,以展示Array.filter
是如何创建新数组的,而mutationFilter
不是。
尽管在大多数情况下,通常需要使用Array.filter
创建一个新数组。使用变异数组的一个优点是,您可以按引用传递数组,而无需将数组包装在另一个对象中。当然,另一个好处是内存,如果您的数组很大,则内联过滤将占用更少的内存。
let arr = ['a','b','a'];
let ref = arr; //keep reference of original arr
function mutationFilter(arr, cb) {
for (let l = arr.length - 1; l >= 0; l -= 1) {
if (!cb(arr[l])) arr.splice(l, 1);
}
}
const cond = x => x !== 'a';
const filtered = arr.filter(cond);
mutationFilter(arr, cond);
console.log(`ref === array -> ${ref === arr}`);
console.log(arr);
console.log(`ref === filtered -> ${ref === filtered}`);
console.log(filtered);
答案 2 :(得分:-1)
您可以这样定义自定义方法:
setInterval(function() {
Check();
}, 10000);
警告:在更改内置原型时要非常谨慎。我什至会说,除非您不做Polyfill。它可能导致的错误非常细微,很难调试。