【问题标题】:removing object from array with filters doesnt work in javascript使用过滤器从数组中删除对象在javascript中不起作用
【发布时间】:2022-01-12 20:35:58
【问题描述】:

我正在尝试从数组中删除一个对象,但我不知道我做错了什么。

我已经声明了这个数组:

listA: [
       { title: 'Food', value: 'Patato' },
       { title: 'Drink', value: 'Cola' },
       { title: 'Desert', value: 'Cheesecake' },
       ],

我正在尝试删除其值为“可乐”的对象,我尝试过的是:

  this.listA.filter(x => x.value !== 'Cola');

它会返回相同的列表

我想退货:

 listA: [
   { title: 'Food', value: 'Patato' },
   { title: 'Desert', value: 'Cheesecake' },
   ],

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:

    您的代码应该过滤得很好,我认为这里的问题是filter 没有修改原始数组,它返回一个带有过滤结果的新数组。如果你想让它覆盖原来的数组,你需要说this.listA = this.listA.filter(...)

    【讨论】:

    • 谢谢你,它有效!
    【解决方案2】:
    const listA = [
      { title: "Food", value: "Patato" },
      { title: "Drink", value: "Cola" },
      { title: "Desert", value: "Cheesecake" },
    ];
    
    const result = listA.filter((obj) => obj.value !== 'Cola');
    

    【讨论】:

      【解决方案3】:

      看起来你需要做类似的事情

      this.listA = this.listA.filter(x => x.value !== 'Cola')
      

      过滤方法是不可变的,因此原始数组没有改变

      【讨论】:

        【解决方案4】:

        作为https://stackoverflow.com/a/70688107/6316468 的补充,下面是filter 在底层所做的事情(原始数组this 保持不变):

        var xs = [1, 2, 3, 4];
        var ys = filter.call(
          xs, x => x % 2
        );
        console.log(
          "xs = [", xs.join(), "]"
        );
        console.log(
          "ys = [", ys.join(), "]"
        );
        
        function filter(predicate) {
          var xs = []; // new array
          for (let x in this) {
            if (predicate(x)) {
              xs.push(x);
            }
          }
          return xs;
        }

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-08
          • 1970-01-01
          • 2021-08-03
          • 2021-03-21
          • 1970-01-01
          • 1970-01-01
          • 2012-04-18
          相关资源
          最近更新 更多