【问题标题】:Remove equal objects from two arrays从两个数组中删除相等的对象
【发布时间】:2021-10-26 15:04:02
【问题描述】:

我的 ReactJs 应用程序中存在以下问题。假设我有两个这样的数组:

var cart = [
   {id: 1, name: "item1"}, 
   {id: 2, name: "item2"}, 
];
var productsArr = [
   {proId: 1, category: 'cat1'}, 
   {proId: 5, category: 'cat7'}, 
];

是否可以比较这两个数组并在 productsArr 中找到购物车 id quals productsArr 的 proId 的任何对象,然后仅从 productsArr 中删除该对象?

(如果是这样,正如我在这个例子中解释的那样,productsArr[0] 应该被删除。)

提前致谢。

【问题讨论】:

  • 是的,有可能。到目前为止,您在代码尝试中遇到了什么问题?

标签: javascript arrays reactjs object javascript-objects


【解决方案1】:

var cart = [
   {id: 1, name: "item1"}, 
   {id: 2, name: "item2"}, 
];

var productsArr = [
   {proId: 1, category: 'cat1'}, 
   {proId: 5, category: 'cat7'}, 
];


for (var i = 0; i<productsArr.length; i++) {
    if (cart.find(item => item.id === productsArr[i].proId)) {
        productsArr.splice(i,1);
        i--;
    }
}

console.log(productsArr);

【讨论】:

  • 考虑到 react.js 标签,我会假设,productsArr 是某些组件状态的一部分,因此很可能首选不可变方法,而 Array.prototype.splice() 会改变原始数组。
  • @YevgenGorbunkov 完全有道理,我没注意标签
  • 不用担心。但是,您可以通过浅拷贝初始数组来克服这一点,例如const _productsArr = [...productsArr] 然后_productsArr.splice(i,1)
【解决方案2】:

您可以将Array#filterArray#some 结合使用。

var cart = [
   {id: 1, name: "item1"}, 
   {id: 2, name: "item2"}, 
];
var productsArr = [
   {proId: 1, category: 'cat1'}, 
   {proId: 5, category: 'cat7'}, 
];
productsArr = productsArr.filter(({proId})=>!cart.some(({id})=>proId === id));
console.log(productsArr);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-27
    • 2022-01-01
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多