首页 > 解决方案 > 从比较数组中返回数组_lodash

问题描述

let a =  [{
    a:1,
    b:3,
    c:[1, 2, 6]
    },
 {
    a:3,
    b:10,
    c:[2, 5, 4]
    },
 {
    a:4,
    b:3,
    c:[7, 12, 6]
    },
 {
    a:4,
    b:12,
    }]

let b = [2, 6]

我想从与 b 数组匹配对象返回一个数组。

我用了 :

lodash.forEach(b , (value)=>{
   lodash.filter(a, {c: value})
}

但这不起作用。我试图简化我的代码以便更好地理解。

标签: javascriptarraysobjectlodash

解决方案


您可以通过查看 的值b是否包含在 中来过滤数组c

var a = [{ a: 1, b: 3, c: [1, 2, 6] }, { a: 3, b: 10, c: [2, 5, 4] }, { a: 4, b: 3, c: [7, 12, 6] }, { a: 4, b: 12 }],
    b = [2, 6],
    result = a.filter(({ c = [] }) => b.some(v => c.includes(v)));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

为了只获取完全匹配的项目,您可以使用Array#every而不是Array#some.

var a = [{ a: 1, b: 3, c: [1, 2, 6] }, { a: 3, b: 10, c: [2, 5, 4] }, { a: 4, b: 3, c: [7, 12, 6] }, { a: 4, b: 12 }],
    b = [2, 6],
    result = a.filter(({ c = [] }) => b.every(v => c.includes(v)));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读