Javascript 在ES6中映射对象并将键按到值
我有以下对象的对象:Javascript 在ES6中映射对象并将键按到值,javascript,ecmascript-6,Javascript,Ecmascript 6,我有以下对象的对象: expenditures: { byId: { '-LK6x1d5vJxhsbtD4KvF': { categoryId: 12, createdAt: 1534510508671, day: 1534464000000, description: 'stuff', updatedAt: 1534510508671, value: -1.2 },
expenditures: {
byId: {
'-LK6x1d5vJxhsbtD4KvF': {
categoryId: 12,
createdAt: 1534510508671,
day: 1534464000000,
description: 'stuff',
updatedAt: 1534510508671,
value: -1.2
},
'-LK6x5tCFOrQZ0nXZO2x': {
categoryId: 13,
createdAt: 1534510526087,
day: 1534464000000,
description: 'food',
updatedAt: 1534510526087,
value: -8.6
},
}
}
我要做的是映射byId
对象,并为每个元素将其键作为id
值。大概是这样的:
expenditures: {
byId: {
'-LK6x1d5vJxhsbtD4KvF': {
categoryId: 12,
createdAt: 1534510508671,
day: 1534464000000,
description: 'stuff',
updatedAt: 1534510508671,
value: -1.2,
id: '-LK6x1d5vJxhsbtD4KvF',
},
'-LK6x5tCFOrQZ0nXZO2x': {
categoryId: 13,
createdAt: 1534510526087,
day: 1534464000000,
description: 'food',
updatedAt: 1534510526087,
value: -8.6,
id: '-LK6x5tCFOrQZ0nXZO2x',
},
}
}
我怎样才能做到这一点?我知道使用
object.keys()
或object.values()
在对象上映射谁,但我不知道如何将键作为值放置。将每次迭代的键存储为另一个属性;您可以在中为..使用,例如:
const支出={
byId:{
“-LK6x1d5vJxhsbtD4KvF”:{
类别:12,
创建日期:1534510508671,
日期:1534464000000,
描述:'东西',
更新日期:1534510508671,
值:-1.2
},
'-LK6x5tCFOrQZ0nXZO2x':{
类别:13,
创建日期:1534510526087,
日期:1534464000000,
描述:“食物”,
更新日期:1534510526087,
值:-8.6
},
}
}
for(const key in expansions.byId){
支出。byId[key]。id=key
}
console.log(expensions.byId)代码>将每次迭代的密钥存储为另一个属性;您可以在
中为..使用,例如:
const支出={
byId:{
“-LK6x1d5vJxhsbtD4KvF”:{
类别:12,
创建日期:1534510508671,
日期:1534464000000,
描述:'东西',
更新日期:1534510508671,
值:-1.2
},
'-LK6x5tCFOrQZ0nXZO2x':{
类别:13,
创建日期:1534510526087,
日期:1534464000000,
描述:“食物”,
更新日期:1534510526087,
值:-8.6
},
}
}
for(const key in expansions.byId){
支出。byId[key]。id=key
}
console.log(expensions.byId)代码>这是一种解决方案:
Object.keys(expenditures.byId).forEach(id => expenditures.byId[id].id = id)
这是一个解决方案:
Object.keys(expenditures.byId).forEach(id => expenditures.byId[id].id = id)
以下是一种利用ES6某些功能的方法:
const支出={
byId:{
“-LK6x1d5vJxhsbtD4KvF”:{
类别:12,
创建日期:1534510508671,
日期:1534464000000,
描述:'东西',
更新日期:1534510508671,
值:-1.2
},
'-LK6x5tCFOrQZ0nXZO2x':{
类别:13,
创建日期:1534510526087,
日期:1534464000000,
描述:“食物”,
更新日期:1534510526087,
值:-8.6
},
}
};
const updatedExpenditures=Object.entries(expensions.byId).reduce((累计、kvPair、arr)=>{
让[key,value]=kvPair;
累计[键]=对象.assign({
id:钥匙
},价值);
返回累计;
}, {});
console.log(updateExpenditures)代码>以下是一种利用ES6某些功能的方法:
const支出={
byId:{
“-LK6x1d5vJxhsbtD4KvF”:{
类别:12,
创建日期:1534510508671,
日期:1534464000000,
描述:'东西',
更新日期:1534510508671,
值:-1.2
},
'-LK6x5tCFOrQZ0nXZO2x':{
类别:13,
创建日期:1534510526087,
日期:1534464000000,
描述:“食物”,
更新日期:1534510526087,
值:-8.6
},
}
};
const updatedExpenditures=Object.entries(expensions.byId).reduce((累计、kvPair、arr)=>{
让[key,value]=kvPair;
累计[键]=对象.assign({
id:钥匙
},价值);
返回累计;
}, {});
console.log(updateExpenditures)代码>以下是使用ES6对象扩展操作符实现目标的方法
const expendituresWithId = {
byId: Object.keys(expenditures.byId).map(key => {
return {
[key]: {
...expenditures.byId[key],
id: key
}
}
})
}
使用此解决方案,您不会更改原始对象。以下是使用ES6对象扩展操作符实现目标的方法
const expendituresWithId = {
byId: Object.keys(expenditures.byId).map(key => {
return {
[key]: {
...expenditures.byId[key],
id: key
}
}
})
}
使用此解决方案,您不会更改原始对象