给出以下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 } ]
}
任何帮助都会很棒,谢谢
答案 0 :(得分:4)
您可以使用reduce
循环中的forEach
进行就地转换:
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)

答案 1 :(得分:1)
您可以使用SELECT variable_name, default_value FROM information_schema.system_variables ORDER BY variable_name
方法
.reduce()
答案 2 :(得分:0)
您可以在reduce
上使用Object.keys
方法,在里面可以使用map
和Object.assign
来返回新对象。
const data = {
gif: ['small', 'medium', 'large'],
jpeg: ['tiny', 'huge']
}
const result = Object.keys(data).reduce(function(r, e) {
r[e] = Object.assign({}, ...data[e].map(k => ({[k]: {quantity: 1}})))
return r;
}, {})
console.log(result)
答案 3 :(得分:0)
const obj = {
gif: ['small', 'medium', 'large'],
jpeg: ['tiny', 'huge']
}
const objKeys = Object.keys(obj);
for(let i=0;i<objKeys.length;i++){
const currentKey = objKeys[i];
obj[currentKey] = obj[currentKey].reduce((sum, element) => {
sum[element] = {quantity: 1};
return sum;
}, {});
}
这是一个解决方案,您将遍历数组并将其替换为对象