Mou*_*iri 4 javascript ecmascript-6
我想通过保留相同的数组而不创建新数组来过滤数组。
与Array.filter():
getFiltersConfig() {
return this.config.filter((topLevelConfig) => topLevelConfig.name !== 'origin')
}
Run Code Online (Sandbox Code Playgroud)
通过按值过滤而不返回新数组来获得相同结果的最佳方法是什么?
为了完整起见,我认为展示一个变异的数组变体可能是有意义的。
下面是一个带有简单函数的片段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);Run Code Online (Sandbox Code Playgroud)
Isa*_*aac -6
不确定为什么你想要进行突变,但如果你真的想要这样做,也许可以将其分配回自身?
let arr = ['a','b','a'];
arr = arr.filter(x => x !== 'a');
console.log(arr)Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4220 次 |
| 最近记录: |