JavaScipt-具有突变的过滤器数组

时间:2019-05-24 13:28:25

标签: javascript ecmascript-6

我想通过保留相同数组而不创建新数组来过滤数组。

带有Array.filter()

getFiltersConfig() {
  return this.config.filter((topLevelConfig) => topLevelConfig.name !== 'origin')
}

通过按值过滤而不返回新数组来获得相同结果的最佳方法是什么?

3 个答案:

答案 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。它可能导致的错误非常细微,很难调试。