请参阅下面的代码。有没有更简洁的方法将originalObject
转换为myObject
?
关键是我尝试根据myObject
中每个媒体资源中的id
设置originalObject
的媒体资源名称。
myObject = Object
.values( originalObject )
.reduce( (acc, x) => {
let propHolder = {}
propHolder[x.id] = false
return Object.assign( acc, propHolder )
}, {} )
答案 0 :(得分:2)
由于您有let
,因此您已计算出属性:
myObject = Object.values(originalObject).reduce((acc, x)=>{
return Object.assign(acc, {[x.id]: false})
},{})
现在因为箭头功能只是一个回报:
myObject =
Object.values(originalObject)
.reduce((acc, x) => Object.assign(acc, {[x.id]: false}), {})
如果你不介意制作一个数组:
myObject =
Object.values(originalObject)
.map(x => ({[x.id]: false}))
.reduce(Object.assign, {});
我希望手头有一个fromPairs
功能。
myObject = fromPairs(
Object.values(originalObject)
.map(x => [x.id, false])
);
如果你使用Lodash的fromPairs
,你也可以使用它的map
。
myObject = _.fromPairs(
_.map(originalObject, x => [x.id, false])
);
答案 1 :(得分:2)
看到Ryan对优雅而长的单线的答案。但既然你要求一种简洁的方法,这就是简单的解决方案:
myObject = {};
for (const k in originalObject)
myObject[originalObject[k].id] = false;
或者可能更有趣:
myObject = {};
for (const {id} of Object.values(originalObject))
myObject[id] = false;
答案 2 :(得分:1)
您可以使用Javascript的spread
语法:
const myObject = Object
.values(originalObject)
.reduce((acc, x) => ({ ...acc, [x.id]: false }), {})
更多阅读:Spread syntax