Javascript 根据另一个对象数组筛选对象数组

Javascript 根据另一个对象数组筛选对象数组,javascript,arrays,underscore.js,lodash,Javascript,Arrays,Underscore.js,Lodash,我有两个这样简化的数组 var a = [{ number: 1, name: "A" }, { number: 2, name: "B" }, { number: 3, name: "C" }, { number: 4, name: "D" }, { number: 5, name: "E" }, { number: 6, name: "F" }]; var b = [{ number: 3, name: "C" }, { number: 6, name: "

我有两个这样简化的数组

var a = [{
 number: 1,
 name: "A"
}, {
 number: 2,
 name: "B"
}, {
 number: 3,
 name: "C"
}, {
 number: 4,
 name: "D"
}, {
 number: 5,
 name: "E"
}, {
 number: 6,
 name: "F"
}];

var b = [{
 number: 3,
 name: "C"
}, {
 number: 6,
 name: "F"
}];
我想要的是返回一个数组,其中a根据b进行过滤。结果就是这样

var result = [{
 number: 1,
 name: "A"
}, {
 number: 2,
 name: "B"
}, {
 number: 4,
 name: "D"
}, {
 number: 5,
 name: "E"
}];
我们已经研究了很多关于堆栈溢出的其他解决方案,但无法使其发挥作用

我可以使用下划线之类的库。

你可以使用。诸如此类:

const filterData = (a,b) => {
    return a.filter( (itemA) => {
        return b.some( (itemB) => { 
            return (itemA.number === itemB.number); 
         });
  });
}
我刚刚创建了一个小提琴来测试代码:(您必须打开控制台来检查结果)

或者。。。一行:

const filterData = (a,b) => a.filter( (itemA) => b.some( (itemB) => (itemA.number === itemB.number) ) );
编辑:感谢@kzh建议,编辑后可供使用。

您可以使用。诸如此类:

const filterData = (a,b) => {
    return a.filter( (itemA) => {
        return b.some( (itemB) => { 
            return (itemA.number === itemB.number); 
         });
  });
}
我刚刚创建了一个小提琴来测试代码:(您必须打开控制台来检查结果)

或者。。。一行:

const filterData = (a,b) => a.filter( (itemA) => b.some( (itemB) => (itemA.number === itemB.number) ) );

编辑:感谢@kzh建议,编辑后可供使用。

可以通过一行解决方案实现
lodash

var a=[{
编号:1,
姓名:“A”
}, {
编号:2,
姓名:“B”
}, {
编号:3,
名称:“C”
}, {
编号:4,
姓名:“D”
}, {
编号:5,
名称:“E”
}, {
编号:6,
名称:“F”
}];
变量b=[{
编号:3,
名称:“C”
}, {
编号:6,
名称:“F”
}];
var结果=0.differenceWith(a,b,0.isEqual);
console.log(结果)

使用
lodash
可以通过一行解决方案实现

var a=[{
编号:1,
姓名:“A”
}, {
编号:2,
姓名:“B”
}, {
编号:3,
名称:“C”
}, {
编号:4,
姓名:“D”
}, {
编号:5,
名称:“E”
}, {
编号:6,
名称:“F”
}];
变量b=[{
编号:3,
名称:“C”
}, {
编号:6,
名称:“F”
}];
var结果=0.differenceWith(a,b,0.isEqual);
console.log(结果)

您可以使用纯javascript使用
filter()
some()
every()
实现这一点

var a=[{“number”:1,“name”:“a”},{“number”:2,“name”:“B”},{“number”:3,“name”:“C”},{“number”:4,“name”:“D”},{“number”:5,“name”:“E”},{“number”:6,“name”:“F”}]
变量b=[{“数字”:3,“名称”:“C”},{“数字”:6,“名称”:“F”}]
var结果=a.filter(函数(o){
返回!b.some(函数(e){
返回Object.keys(o).length==Object.keys(e).length&&Object.keys(o).every(函数k){
返回e[k]==o[k]
})
})
})

log(result)
您可以使用普通javascript,使用
filter()
some()
every()
来实现这一点

var a=[{“number”:1,“name”:“a”},{“number”:2,“name”:“B”},{“number”:3,“name”:“C”},{“number”:4,“name”:“D”},{“number”:5,“name”:“E”},{“number”:6,“name”:“F”}]
变量b=[{“数字”:3,“名称”:“C”},{“数字”:6,“名称”:“F”}]
var结果=a.filter(函数(o){
返回!b.some(函数(e){
返回Object.keys(o).length==Object.keys(e).length&&Object.keys(o).every(函数k){
返回e[k]==o[k]
})
})
})
console.log(结果)
有关更多信息,请参阅Lodash文档:


有关更多信息,请参阅Lodash文档:

您可以使用JavaScript中内置的
过滤器
函数用另一个数组过滤数组。请查看下面的代码片段

var a=[{
编号:1,
姓名:“A”
}, {
编号:2,
姓名:“B”
}, {
编号:3,
名称:“C”
}, {
编号:4,
姓名:“D”
}, {
编号:5,
名称:“E”
}, {
编号:6,
名称:“F”
}];
变量b=[{
编号:3,
名称:“C”
}, {
编号:6,
名称:“F”
}];
var结果=a.filter(函数(当前值、索引、arr){
var=false;
对于(变量i=0;i控制台日志(结果)
您可以使用JavaScript中内置的
filter
函数用另一个数组过滤一个数组检查下面的代码段

var a=[{
编号:1,
姓名:“A”
}, {
编号:2,
姓名:“B”
}, {
编号:3,
名称:“C”
}, {
编号:4,
姓名:“D”
}, {
编号:5,
名称:“E”
}, {
编号:6,
名称:“F”
}];
变量b=[{
编号:3,
名称:“C”
}, {
编号:6,
名称:“F”
}];
var结果=a.filter(函数(当前值、索引、arr){
var=false;
对于(变量i=0;i控制台日志(结果)什么是“过滤”的意思?你想把它们结合起来吗?你想要双鱼座的所有物品吗?你想要独一无二的东西吗?澄清。如果您使用的是lodash(升级的下划线),只需使用u.differenceBy()即可找到它。检查我的答案“过滤”是什么意思?你想把它们结合起来吗?你想要双鱼座的所有物品吗?你想要独一无二的东西吗?澄清。如果您使用的是lodash(升级的下划线),只需使用u.differenceBy()即可找到它。签出我的答案如果作者不想只检查名称字段怎么办?@MaximKuzmin您的解决方案更好。所以要使用lodash,我必须更改所有下划线函数?看起来它们不是一起工作的。@实际上,lodash是下划线的克隆,具有更多的功能(更多)。改用lodash是个好主意。大多数功能都是相同的,尽管有些功能可能会中断。只要核实一下。同时,您可以单独使用(安装)lodash的每个功能。签出您可以通过npm单独安装此函数install lodash.DifferenceBy如果作者不想只检查名称字段怎么办?@MaximKuzmin您的解决方案更好。所以要使用lodash,我必须更改所有下划线函数?看起来它们不是一起工作的。@实际上,lodash是下划线的克隆,具有更多的功能(更多)。改用lodash是个好主意。大多数功能都是相同的,尽管有些功能可能会中断。只要核实一下。同时,您可以单独使用(安装)lodash的每个功能。签出您可以通过npm install lodash单独安装此功能。不同之处在于您可能应该使用
some
而不是
forEach
s