【问题标题】:How to filter objects by objects in JsJs中如何按对象过滤对象
【发布时间】:2020-07-24 09:59:28
【问题描述】:

我的第一个对象是:

 {Color: [
         {display: "RED", value: "5433", count: "12"}
         {display: "Black", value: "5446", count: "37"}    
        ]
        Brand: [
         {display: "NIKAVI", value: "5458", count: "58", brand: }
         {display: "BOSCH", value: "5570", count: "7",}
         {display: "REPLAY", value: "5497", count: "132",}
        ]
        Category: [
         {display: "Motorbike Horns", value: "1320", count: "8"}
         {display: "LED Lamps", value: "1325", count: "3"}
        ]
    }

我的第二个对象是:

{Brand: "5458", Color: "5446",Category:[1320,75]}

我必须使用第二个对象值过滤第一个对象值。我尝试了很多,但找不到好主意。我在 reactJs 工作。

【问题讨论】:

  • “我已经尝试了很多......” - 请至少添加最有希望的一个,并分别描述您遇到的问题以及它引发的错误。跨度>
  • 暂时忘记代码 - 你将如何手动解决它?

标签: javascript arrays reactjs object filter


【解决方案1】:

你可以试试这个;

firstObj = {Color: [
  {display: "RED", value: "5433", count: "12"},
  {display: "Black", value: "5446", count: "37"}    
 ],
 Brand: [
  {display: "NIKAVI", value: "5458", count: "58",},
  {display: "BOSCH", value: "5570", count: "7",},
  {display: "REPLAY", value: "5497", count: "132",}
 ]
};

secondObj={Brand: "5458", Color: "5446"}

// solution:
const result =Object.keys(secondObj).map(sk => firstObj[sk].filter(fo => fo.value === secondObj[sk]))
    
    
    console.log(result)

【讨论】:

  • 谢谢你的回答拯救了我的一天。我刚刚编辑了我的问题。你能帮忙做一些小的修改吗
【解决方案2】:

您可以简单地在第二个对象上迭代键值对,然后使用Array#find 方法(如果您需要一个数组或有多个数组,则使用Array#filter 方法)来获得结果。

const obj1 = {Color: [
         {display: "RED", value: "5433", count: "12"},
         {display: "Black", value: "5446", count: "37"}    
        ],
        Brand: [
         {display: "NIKAVI", value: "5458", count: "58", brand: ''},
         {display: "BOSCH", value: "5570", count: "7",},
         {display: "REPLAY", value: "5497", count: "132",}
        ],
        Category: [
         {display: "Motorbike Horns", value: "1320", count: "8"},
         {display: "LED Lamps", value: "1325", count: "3"}
        ]
    };

;
const obj2={Brand: "5458", Color: "5446",Category:[1320,75]};



const res = {};

for (let [key, value] of Object.entries(obj2)) {
  res[key] = obj1[key].filter(o => Array.isArray(value) ? value.some(v => v == o.value) : o.value === value) 
}


console.log(res);

【讨论】:

  • 谢谢你的回答拯救了我的一天。我刚刚编辑了我的问题。你能帮忙做一些小的修改吗
  • 非常感谢先生。你又一次拯救了我的一天。我可以知道你在哪里学的这些东西
猜你喜欢
  • 2022-07-20
  • 2021-06-28
  • 2021-12-25
  • 2021-05-04
  • 1970-01-01
  • 2021-11-09
  • 2020-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多