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 如何在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

如果有两个对象数组,如何筛选obj2上的obj1? 我要做的是

  • 如果obj1与obj2具有相同的值,则保留包含相同值的obj2对象 使用obj1的值

  • 设置保留对象的状态

  • 我就是这样尝试的。
    这个逻辑的问题是
    返回的值仅包含筛选的值
    {食物:['香蕉]}
    但它必须返回所有包含“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);
        }
     }