我有一个对象对象(例如(:
const previousMap = {123456: {title: 'Test 1', productID: 123456}, 234567: {title: 'Test 2', productID: 234567}}
并且希望返回一个新对象,每个键都是前一个对象的标题,其值是sku(恰好也是最后一个对象,但我宁愿使用.sku属性(。
例如:
const newMap = {'Test 1' : 123456, 'Test 2': 234567}
我试过:
newMap = Object.entries(previousMap).map(([key, value]) => ({[value.title] : value.productID}))
但最终得到了一系列物体。
这是我觉得我通常能够完成的事情,但我的大脑今天真的不工作了。任何帮助=非常感谢:(
另一种可能的解决方案:
更改映射以返回键和值[k,v]
的数组,然后对其调用Object.fromEntries
。
const previousMap = {
123456: {
title: 'Test 1',
productID: 123456
},
234567: {
title: 'Test 2',
productID: 234567
}
}
let newMap = Object.fromEntries(
Object.entries(previousMap)
.map(([key, value]) => [value.title, value.productID])
);
console.log(newMap)
根据定义,.map
将始终返回一个数组。相反,您可以使用.reduce
,从一个空对象作为累加器的初始值开始,并在每次迭代中将其扩展到新的返回对象中:
const previousMap = {
123456: {
title: 'Test 1',
productID: 123456
},
234567: {
title: 'Test 2',
productID: 234567
}
}
const newMap = Object.entries(previousMap)
.reduce(
(acc, [key, value]) => ({
...acc,
[value.title]: value.productID
}), {}
);
console.log(newMap);
你也可以通过一个简单的循环来完成这一点,如果你愿意的话,可以继续改变一个对象。