Javascript 优化double for with.map/.filter/.reduce之类的

Javascript 优化double for with.map/.filter/.reduce之类的,javascript,ecmascript-6,ecmascript-5,Javascript,Ecmascript 6,Ecmascript 5,有没有一种方法可以通过ES5/ES6优化以下内容 var obj = []; var set; for (var key_s in data1) { set = false; for (var key_s2 in data2) { if (data1[key_s].id === data2[key_s2].id) { obj.push({'id': data1[key_s].id, 'key':

有没有一种方法可以通过ES5/ES6优化以下内容

var obj = [];
var set;
for (var key_s in data1) {
    set = false;
    for (var key_s2 in data2) {
        if (data1[key_s].id === data2[key_s2].id) {
            obj.push({'id': data1[key_s].id,
                      'key': data1[key_s].key,
                      'value': data2[key_s2].value})
            set = true;
            break;
        }
    }
    if (!set)
        obj.push({'id': data1[key_s].id,
                  'key': data1[key_s].key,
                  'value': "EMPTY"})
}
我想要一个对象,它包含
data1
的所有键,如果一对具有与
data2
中相同的
id
,它应该取它的
值,否则它应该变成
“空”
。或者有没有一种方法可以使用
对象。为
分配一些特殊的参数或什么?

您可以使用
data2
data1
以及
data2
的可能值

var map = new Map(data2.map(o => ([o.id, o]))),
    obj = data1.map(({ id, key }) => ({ id, key, value: map.has(id)
        ? map.get(id).value
        : 'EMPTY'
    }));
var obj = data1.map(obj1 => {
  const obj2 = data2.find(obj2 => obj1.id === obj2.id);
  return Object.assign({ value: 'EMPTY' }, obj1, obj2);
});
你可以用,和。通过在
Object.assign
的第一个参数中指定
,您可以从
数据2
中设置默认值以被对象覆盖

var map = new Map(data2.map(o => ([o.id, o]))),
    obj = data1.map(({ id, key }) => ({ id, key, value: map.has(id)
        ? map.get(id).value
        : 'EMPTY'
    }));
var obj = data1.map(obj1 => {
  const obj2 = data2.find(obj2 => obj1.id === obj2.id);
  return Object.assign({ value: 'EMPTY' }, obj1, obj2);
});
使用,可以将
对象.assign
更改为:

{ value: 'EMPTY', ...obj1, ...obj2 }

这是一个非常简单的es6'ed。
map
over data1,
.find
将返回匹配对象(如果存在),否则返回
未定义的
。将
key\u.value
设置为
key\u s2
值或
“EMPTY”
,然后返回key\s对象。您将得到一个对象数组。这假设data1和data2是对象数组,这就是您的示例的编写方式,因此我认为情况就是这样

let obj = data1.map(key_s => {
  let newValue = data2.find(key_s2 => key_s.id === key_s2.id)
  key_s.value = newValue ? newValue.value : "EMPTY"
  return key_s
 })
})

优化在什么意义上?效率?可读性?请同时添加
data1
data2
以及想要的结果。
data1
data2
都是数组吗?首先,您可以从
data2
的对象中添加一些其他(不需要的)属性…@NinaScholz这是真的。我只是假设不会有其他的财产,或者这不重要。我更喜欢您的解决方案,因为它不会每次迭代
data2