【问题标题】:Remove an object from an array using lodash使用 lodash 从数组中删除一个对象
【发布时间】:2019-08-14 17:31:43
【问题描述】:

我想按用户想要多少次的 id 从数组中删除一个对象

num = 用户想要删除的次数。

我正在使用“_.find”来查找产品的 id 是否与对象匹配。

我已经尝试过使用 '_.remove' 但这会删除所有具有相同 id 的内容,我只想删除用户放置的次数

我的代码

_.times(num, () => {
    _.remove(this.businessItem.associatedProducts, function() {
           return _.find(this.businessItem.associatedProducts, {id: product.id});
         });
      });

对象 businessItem.associatedProducts

[{
    archived: false,
    archivedAt: null,
    categoriesFilter: {},
    category: {},
    categoryId: "7MdXH5wcrzN7SSQkDEUT"
  },
  {
    archived: false,
    archivedAt: null,
    categoriesFilter: {},
    category: {},
    categoryId: "7MdXH5wcrzN7SSQkDEUT"
  },
  {
    archived: false,
    archivedAt: null,
    categoriesFilter: {},
    category: {},
    categoryId: "7MdXH5wcrzN7SSQkDEUT"
  },
  {
    archived: false,
    archivedAt: null,
    categoriesFilter: {},
    category: {},
    categoryId: "7MdXH5wcrzN7SSQkDEUT"
  },
  {
    archived: false,
    archivedAt: null,
    categoriesFilter: {},
    category: {},
    categoryId: "7MdXH5wcrzN7SSQkDEUT"
  },
  {
    archived: false,
    archivedAt: null,
    categoriesFilter: {},
    category: {},
    categoryId: "7MdXH5wcrzN7SSQkDEUT"
  },
  {
    archived: false,
    archivedAt: null,
    categoriesFilter: {},
    category: {},
    categoryId: "7MdXH5wcrzN7SSQkDEUT"
  },
  {
    archived: false,
    archivedAt: null,
    categoriesFilter: {},
    category: {},
    categoryId: "7MdXH5wcrzN7SSQkDEUT"
  },
  {
    archived: false,
    archivedAt: null,
    categoriesFilter: {},
    category: {},
    categoryId: "7MdXH5wcrzN7SSQkDEUT"
  },
  {
    archived: false,
    archivedAt: null,
    categoriesFilter: {},
    category: {},
    categoryId: "7MdXH5wcrzN7SSQkDEUT"
  }
]

【问题讨论】:

    标签: javascript arrays object lodash


    【解决方案1】:

    你可以使用lodash_.filter()(或者vanilla JSArrayfilter()或者_.reject(),并减一个counter。只要计数器中的值大于0,并且ids匹配,删除元素来自数组。

    注意:_.remove() 会改变原始数组,并返回一个包含已删除项的数组,因此在这种情况下,我更喜欢 filter/reject 方法,它返回一个没有删除项的新数组。

    const fn = (num, id, arr) => {
      let counter = num
      
      return _.reject(arr, o => counter-- > 0 && o.categoryId === id)
    }
    
    const arr = [{"archived":false,"archivedAt":null,"categoriesFilter":{},"category":{},"categoryId":"7MdXH5wcrzN7SSQkDEUT"},{"archived":false,"archivedAt":null,"categoriesFilter":{},"category":{},"categoryId":"7MdXH5wcrzN7SSQkDEUT"},{"archived":false,"archivedAt":null,"categoriesFilter":{},"category":{},"categoryId":"7MdXH5wcrzN7SSQkDEUT"},{"archived":false,"archivedAt":null,"categoriesFilter":{},"category":{},"categoryId":"7MdXH5wcrzN7SSQkDEUT"},{"archived":false,"archivedAt":null,"categoriesFilter":{},"category":{},"categoryId":"7MdXH5wcrzN7SSQkDEUT"},{"archived":false,"archivedAt":null,"categoriesFilter":{},"category":{},"categoryId":"7MdXH5wcrzN7SSQkDEUT"},{"archived":false,"archivedAt":null,"categoriesFilter":{},"category":{},"categoryId":"7MdXH5wcrzN7SSQkDEUT"},{"archived":false,"archivedAt":null,"categoriesFilter":{},"category":{},"categoryId":"7MdXH5wcrzN7SSQkDEUT"},{"archived":false,"archivedAt":null,"categoriesFilter":{},"category":{},"categoryId":"7MdXH5wcrzN7SSQkDEUT"},{"archived":false,"archivedAt":null,"categoriesFilter":{},"category":{},"categoryId":"7MdXH5wcrzN7SSQkDEUT"}]
    
    const result = fn(9, '7MdXH5wcrzN7SSQkDEUT', arr)
    
    console.log(result)
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 2014-07-18
      • 1970-01-01
      • 2018-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多