下面是我的工作代码示例,但我遇到的问题是,当我有超过100k的记录时,这个脚本需要很长时间才能运行,我想知道是否有更快的方法来执行此操作。 / p>
注意:我有两个对象数组,我需要根据第一个数组来设置第二个数组的对象名称。 ID将在两者之间匹配,订单将是随机的。
const _ = require('lodash');
let res1 = [
{id:1, name:'Sandra'},
{id:2, name:'Bill'},
{id:3, name:'Peter'},
{id:4, name:'Jill'}
];
let res2 = [
{id:2, name:'John'},
{id:4, name:'Bobby'}
];
_.forEach(res1, function(data1) {
_.forEach(res2, function(data2) {
if (data1.id === data2.id) {
data2.name = data1.name;
}
});
});
// res2 = [{id:2, name:'bill'},{id:4, name:'Jill'}];
答案 0 :(得分:1)
按id res1
创建地图,然后迭代第二个数组,并替换找到res1map
的每个ID的名称。
const res1 = [
{id:1, name:'Sandra'},
{id:2, name:'Bill'},
{id:3, name:'Peter'},
{id:4, name:'Jill'}
];
const res2 = [
{id:2, name:'John'},
{id:4, name:'Bobby'}
];
const res1Map = _.keyBy(res1, 'id');
res2.forEach((o) => res1Map[o.id] && (o.name = res1Map[o.id].name));
console.log(res2);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
答案 1 :(得分:0)
使用forEach
和find
的简单解决方案:
let res1 = [
{id:1, name:'Sandra'},
{id:2, name:'Bill'},
{id:3, name:'Peter'},
{id:4, name:'Jill'}
];
let res2 = [
{id:2, name:'John'},
{id:4, name:'Bobby'}
];
res2.forEach((item) => {
item.name = res1.find((person) => person.id === item.id).name
});
console.log(res2);