【问题标题】:Javascript: destructive array.filter()? [duplicate]Javascript:破坏性 array.filter()? [复制]
【发布时间】:2018-06-10 15:44:52
【问题描述】:

有没有很好的函数式方式在循环时删除 JS 数组中的元素?

我知道过滤器可以用来创建一个新数组:

var newArr = arr.filter((x) => x.foo > bar)

但是有没有办法在你去的时候真正从arr 中删除元素?

顺便说一句:我不能重新分配,这是 Vue 组件上的数据对象,所以我需要更新,而不是重新分配。

BTW2:这不是重复的。我知道如何使用普通的 JS 迭代来做到这一点。我正在寻找一种功能性的方式,而引用的答案不包含该方式。不是骗子。

【问题讨论】:

  • arr = arr.filter((x) => x.foo > bar)??
  • @Chiller 仍然会创建一个新数组。
  • 我知道删除项目的唯一方法是在数组上向后循环,或者使用 reduce 创建一个新数组。
  • 这是因为担心内存消耗吗?
  • @mtyson 我也有同样的问题.. 你有没有想出一个像你希望的那样优雅的解决方案?

标签: javascript arrays ecmascript-6


【解决方案1】:

只需重新分配Array

let arr = [1,2,3,4,5];
arr = arr.filter(v => v < 3);
console.log(arr);

【讨论】:

  • 无法重新赋值,这是Vue组件上的数据对象,所以需要更新,而不是重新赋值。
【解决方案2】:

为什么不简单地这样做

arr = arr.filter((x) => x.foo > bar)

【讨论】:

    猜你喜欢
    • 2018-06-30
    • 1970-01-01
    • 2019-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    相关资源
    最近更新 更多