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循环得到了结果,在这里发布它会使问题更加复杂。这就是为什么我避免了这一点。实际上,它看起来像是,为我编写代码。但是与您的代表一起,哟你应该知道,这是怎么回事。