Javascript 比较两个JSON数组,然后从中形成一个数组?

Javascript 比较两个JSON数组,然后从中形成一个数组?,javascript,arrays,Javascript,Arrays,我有两个数组名为 a = [{"id":"1","mark":"96",...},{"id":"2","mark":"65",...}]; b = [{"student_id":"1","grade":"A"},{"student_id":"2","grade":"c"}]; 我想比较两个数组,如果'id'和'student\u id'匹配我想将分数值推送到'a'数组。那么我的结果会是: 预期结果: c = [{"id":"1","mark":"96","grade":"A",...},

我有两个数组名为

a = [{"id":"1","mark":"96",...},{"id":"2","mark":"65",...}];

b = [{"student_id":"1","grade":"A"},{"student_id":"2","grade":"c"}];
我想比较两个数组,如果'id''student\u id'匹配我想将分数值推送到'a'数组。那么我的结果会是:

预期结果:

c = [{"id":"1","mark":"96","grade":"A",...},
    {"id":"2","mark":"65","grade":"c".....}];

使用
.find
标识另一个数组中的匹配元素,使用
.reduce
从中生成新对象:

const marks=[{“id”:“1”,“mark”:“96”},{“id”:“2”,“mark”:“65”}];
const students=[{“学生id”:“1”,“年级”:“A”},{“学生id”:“2”,“年级”:“c”}];
const result=marks.reduce((resultsSoFar,mark)=>{
const id=mark.id;
const grade=students.find({student\u id})=>student\u id==id.grade;
结果自动推送({…标记,等级});
迄今为止的返回结果;
}, []);

控制台日志(结果)以下是如何在
n
复杂度中实现这一点:

const a=[{
“id”:“1”,
“标记”:“96”
}, {
“id”:“2”,
“标记”:“65”
}];
常数b=[{
“学生id”:“1”,
“等级”:“A”
}, {
“学生id”:“2”,
“等级”:“c”
}];
让map=a.reduce((acc,item)=>{
acc[项目id]=项目;
返回acc;
}, {});
b、 forEach(项目=>{
if(映射[项目.学生id]){
地图[item.student\u id]。成绩=item.grade;
}
});

console.log(Object.values(map))
您可以使用
for
循环在数组
a
和数组
b
上循环,然后每当您在
id
student\u id
中获得匹配时,添加
grade
属性并将对象推送到新数组
c
。您还可以
中断
for循环,以避免在找到匹配项后出现更多不必要的循环

var a=[{“id”:“1”,“mark”:“96”},{“id”:“2”,“mark”:“65”}];
变量b=[{“学生id”:“1”,“年级”:“A”},{“学生id”:“2”,“年级”:“c”}];
var c=[];

对于(var i=0;i您可以通过使用数组的
map()
forEach()
执行以下操作:

var a=[{“id”:“1”,“mark”:“96”},{“id”:“2”,“mark”:“65”}];
变量b=[{“学生id”:“1”,“年级”:“A”},{“学生id”:“2”,“年级”:“c”}];
var c=a.map(函数(i){
b、 forEach(函数(j){
如果(i.id==j.student\U id){
i、 等级=j级;
}
});
返回i;
})

console.log(c);
假设数组中没有
“grade”
-对象
a

let a=[{“id”:“1”,“mark”:“96”},{“id”:“2”,“mark”:“65”}];
设b=[{“学生id”:“1”,“年级”:“A”},{“学生id”:“2”,“年级”:“c”}];
设c=[];
for(var iterateA=0,elA;elA=a[iterateA];iterateA++){
for(var iterateB=0,elB;elB=b[iterateB];iterateB++){
如果(elA.id==elB.student\U id){
elA['grade']=elB.grade;
c、 推(elA);
}
}
}
console.log(c);
这应该可以

for(var i=0; i<a.length;i++) {
        for(var j = 0; j<b.length;j++) {
            if(a[i].id === b[j].student_id) {
                c.push({
                    'id': a[i].id,
                    'mark': a[i].mark,
                    'grade': b[j].grade
                });
            }
        }
    }
for(var i=0;i使用map和find

a=[{“id”:“1”,“mark”:“96”},{“id”:“2”,“mark”:“65”}];
b=[{“学生id”:“1”,“年级”:“A”},{“学生id”:“2”,“年级”:“c”}];
updatedA=a.map((val)=>{
让bVal=b.find((item)=>item.student_id===val.id)
if(bVal){
val.grade=bVal.grade;
}
返回val;
})

console.log(updatedA)
请添加您的尝试。请添加您的尝试,我们可以讨论您的问题。为什么会有这么多人投票反对。这是一个有效的问题,对吗?我尝试了一下,通过使用for循环得到了结果,在这里发布它会使问题更加复杂。这就是为什么我避免了这一点。实际上,它看起来像是,为我编写代码。但是与您的代表一起,哟你应该知道,这是怎么回事。