Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在ES6中映射对象并将键按到值_Javascript_Ecmascript 6 - Fatal编程技术网

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
            }
        }
    })
}
使用此解决方案,您不会更改原始对象