给定以下 JSON
{
gif: ['small', 'medium', 'large'],
jpeg: ['tiny', 'huge']
}
我想将数组中的每个元素转换为子对象中的键,并为其分配数量 1。
这样
{
gif: {
small: {quantity: 1},
medium: {quantity: 1},
large: {quantity:1}
},
jpeg: {
tiny: {quantity:1},
huge: {quantity: 1}
}
}
我最接近的是以下
for(let image in obj) {
obj[image].forEach(size => { obj[image][size] = { quantity:1}})
}
然而不幸的是,这个输出
{ gif:
[ 'small',
'medium',
'large',
small: {quantity: 1},
medium: {quantity: 1},
large: {quantity: 1} ],
jpeg: [ 'huge', 'tiny', tiny: {quantity:1} huge: {quantity: 1 } ]
}
任何帮助都会很棒,谢谢
最佳答案
您可以在 forEach
循环中使用 reduce
就地转换它:
const o = {
gif: ['small', 'medium', 'large'],
jpeg: ['tiny', 'huge']
}
Object.keys(o)
.forEach(
k => o[k] = o[k].reduce(
(a, e) => (a[e] = {
quantity: 1
}) && a, {}
)
)
console.log(o)
并使用双 reduce
转换成一个新对象:
const o = {
gif: ['small', 'medium', 'large'],
jpeg: ['tiny', 'huge']
}
var o2 = Object.keys(o).reduce((n, k) => (n[k] = o[k].reduce((a, e) => (a[e] = {quantity:1}) && a, {})) && n, {})
console.log(o2)
关于javascript - 将数组转换为特定对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48836903/