Javascript 在forEach循环中使用动态键

Javascript 在forEach循环中使用动态键,javascript,foreach,key,javascript-objects,Javascript,Foreach,Key,Javascript Objects,我有以下javascript对象 const items = { 0: { id: 1, color: 'blue' }, 1: { id: 2, color: 'red' } } 我正在尝试重新构造它,以便键具有如下索引数值:item1id,item1color,item2id,item2color。或者更准确地说,它最终应该是这样的: const restrucuturedItems = {

我有以下javascript对象

const items = {
    0: {
        id: 1,
        color: 'blue'
    },
    1: {
        id: 2,
        color: 'red'
    }
}
我正在尝试重新构造它,以便键具有如下索引数值:item1iditem1coloritem2iditem2color。或者更准确地说,它最终应该是这样的:

const restrucuturedItems = {
    item1id: 1,
    item1color: 'blue',
    item2id: 2,
    item2color: 'red'
}
我尝试了以下方法,但迄今为止没有产生积极的结果:

const restrucuturedItems = {}; // should collect the restructured data in one object like so: {item1id: 1, item1color: 'blue', item2id:2, item2color: 'red'}
const restructuredData = Object.keys(items).forEach(key => {
    let i = parseInt(key, 10) + 1;
    let item = {
        item[i]id: 1, // this part is incorrect. it should produce item1id, item2id
        item[i]color: 'blue' // this part is incorrect. it should produce item1color, item2color
    }
    restrucuturedItems.push(item);
});

经过数小时的研究,我仍然不知道如何正确编写这部分。

你不应该使用
push
,因为你希望你的
restrucuturedItems
是一个对象,而不是数组

i
与括号内的id或颜色连接起来,并使用两个
对象。条目
-一个用于获取外部对象中每个对象的键和值,另一个用于获取每个内部对象的键和值:

const项={
0: {
id:1,
颜色:“蓝色”
},
1: {
id:2,
颜色:“红色”
}
}
console.log(Object.entries(items).reduce((a[num,obj])=>{
Object.entries(obj.forEach)([key,val])=>{
a['item'+num+key]=val;
});
返回a;
}, {}));
const项={
0: {
id:1,
颜色:“蓝色”
},
1: {
id:2,
颜色:“红色”
}
}
常量restrucuturedItems={};//应该在一个对象中收集重构的数据,如下所示:{item1id:1,item1color:'blue',item2id:2,item2color:'red'}
const restructuredData=Object.key(items).forEach(key=>{
设i=parseInt(键,10)+1;
restrucuturedItems[`item${i}id`]=1;
restrucuturedItems[`item${i}color`]='blue'
});

console.log(restrucuturedItems)
一个reduce和map函数可以完成这项工作

var result = Object.values(items).reduce(function (r, val) { // get all the values
  var prefix = 'item' + val.id; // construct the prefix like item1, item2
  Object.getOwnPropertyNames(val).map(function(key) {
    r[prefix + key] = val[key]; // add to the result object
  });
  return r;
}, {});