比较和合并来自JavaScript中两个数组的数据

时间:2020-05-14 14:33:49

标签: javascript arrays node.js loops data-structures

大家好,我是数据结构的新手,我一直在用JavaScript练习一些数组操作。我想关注

var classes = [{id : 1, class:'first'},{id : 2, class:'second'},{id : 3, class:'third'},{id : 4, class:'fourth'}]
var students =[{classId : 1, count:30}, {classId : 3, count:46}, {classId : 2, count:52}]

我希望得到以下输出

classes = [
{id : 1, class:'first', count:30},
{id : 2, class:'second', count:52},
{id : 3, class:'third', count:46},
{id : 4, class:'fourth', count:0}

]

我已经尝试过以下代码

for (var i = 0; i < classes.length; i++) {
    for (j = 0; j < students.length; j++) {

        if (classes[i]["id"] == students[j]["classId"]) {
            classes[i]["count"] = students[j]["count"]


        } else {
            classes[i]["count"] = 0
        }

        if (i == classes.length - 1) {
            console.log(classes);
        }

    }

}

但是没有运气,除了for循环之外还有其他更好的方法吗?有人可以帮我吗?

预先感谢

2 个答案:

答案 0 :(得分:0)

使用.map().find()组合:

map()方法创建一个新数组,其中填充了在调用数组中每个元素上调用提供的函数的结果。

find()方法返回提供的数组中满足提供的测试功能的第一个元素的值。

代码段,可能的解决方案:

const classes = [{id : 1, class:'first'},{id : 2, class:'second'},{id : 3, class:'third'},{id : 4, class:'fourth'}]
const students =[{classId : 1, count:30}, {classId : 3, count:46}, {classId : 2, count:52}];

const result = classes.map(e => {
  const found = students.find(s => s.classId === e.id);
  return {
    ...e,
    count: found ? found.count : 0
  }
});

console.log(result);

我希望这会有所帮助!

答案 1 :(得分:0)

尝试使用此解决方案

for(let class in classes){
console.log(classes[class]);
}

您在这里所做的是遍历数组类的所有索引,并将该索引存储在类中。然后您console.log索引。