Javascript 如何在React中筛选2个对象数组? const obj1=[{'food':['apple'],'drink':['wine','juice']}]; const obj2=[{id:1,‘食物’:['apple'],虚拟:'test','drink':['wine','juice']}, {id:2,‘食物’:‘香蕉’,‘测试’,‘饮料’:[‘果汁’]}, {id:3,‘食物’:[‘苹果’、‘香蕉’]、虚拟‘测试’}、‘饮料’:[‘果汁’]} ]; //结果应该是这样的 const result=[{id:1,‘食物’:[‘苹果’],‘饮料’:[‘葡萄酒’,‘果汁’}];
如果有两个对象数组,如何筛选obj2上的obj1? 我要做的是Javascript 如何在React中筛选2个对象数组? const obj1=[{'food':['apple'],'drink':['wine','juice']}]; const obj2=[{id:1,‘食物’:['apple'],虚拟:'test','drink':['wine','juice']}, {id:2,‘食物’:‘香蕉’,‘测试’,‘饮料’:[‘果汁’]}, {id:3,‘食物’:[‘苹果’、‘香蕉’]、虚拟‘测试’}、‘饮料’:[‘果汁’]} ]; //结果应该是这样的 const result=[{id:1,‘食物’:[‘苹果’],‘饮料’:[‘葡萄酒’,‘果汁’}];,javascript,reactjs,Javascript,Reactjs,如果有两个对象数组,如何筛选obj2上的obj1? 我要做的是 如果obj1与obj2具有相同的值,则保留包含相同值的obj2对象 使用obj1的值 设置保留对象的状态 我就是这样尝试的。 这个逻辑的问题是 返回的值仅包含筛选的值 {食物:['香蕉]} 但它必须返回所有包含“banana”的对象,而不仅仅是“banana”。 (以便我可以使用筛选结果设置状态) //密钥参数是从外部接收到的密钥。(应该是“食物”或“饮料”) 常量showFilteredRes=(对象J1,键)=>{ 设fil
这个逻辑的问题是
返回的值仅包含筛选的值
{食物:['香蕉]}
但它必须返回所有包含“banana”的对象,而不仅仅是“banana”。
(以便我可以使用筛选结果设置状态)
//密钥参数是从外部接收到的密钥。(应该是“食物”或“饮料”)
常量showFilteredRes=(对象J1,键)=>{
设filteredRes={};
obj2.forEach((obj2)=>{
用于(obj1中的let过滤器){
for(让信息进入obj2){
如果(过滤器===信息){
filteredRes[infos]=obj2[key];
控制台日志(filteredRes);
}
}
}
});
};
如何开发此代码
我编辑了我的示例,因为我的解释太差。利用:
const obj1=[{
“食物”:[“香蕉”],
“饮料”:[“葡萄酒”、“果汁”]
}];
常数obj2=[{
id:1,
“食物”:[“苹果”、“奶油冻”],
虚拟:“测试”,
“饮料”:[“葡萄酒”、“果汁”]
},
{
id:2,
“食物”:[“香蕉”],
虚拟:“测试”,
“饮料”:[“果汁”]
},
{
id:3,
‘食物’:[‘苹果’、‘香蕉’],
虚拟:“测试”,
‘饮料’:[‘果汁’、‘葡萄酒’]
}
];
常量showFilteredRes=(已过滤,键)=>{
让结果=[];
filtered.forEach((filteredObj)=>{
obj2.forEach((obj)=>{
if(JSON.stringify(obj[key])==JSON.stringify(filteredObj[key])){
结果:推送(obj);
}
})
})
控制台日志(结果);
};
showFilteredRes(obj1,“食品”)代码>在数组中循环并与deep equal进行比较。您应该给出一些输入和所需输出的示例,以使其更清晰。我认为在这种情况下,some()不是一个好方法。因为当它找到匹配的值时返回true。但是在我的例子中,即使方法找到了匹配的大小写,它仍然需要搜索直到数组结束。为什么你这么认为?请提供原因。首先,some()返回布尔类型的数据。但我需要过滤对象。其次,让我说,如果我把“苹果”作为关键字,有5个对象数组要搜索。但若第一个对象数组具有“apple”值,那个么some()方法将停止搜索并返回true。
const showFilteredRes = (filtered, key) => {
let filteredRes = {};
obj2.forEach(entry => {
if(entry[key].some(item => obj1[key].includes(item)))
{
console.log(filteredRes);
}
}