javascript - 将数组转换为特定对象

标签 javascript arrays json javascript-objects

给定以下 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/

相关文章:

javascript - 触发 onClick();页面加载时

javascript - 到达部分时从垂直滚动更改为水平滚动

javascript - 在已运行的 lightGallery 实例中添加/编辑选项

python - numpy.linalg.linalg.LinAlgError : SVD did not converge

php - 改造 2 : NO Request Body even there is

javascript - AJAX 之前的 Javascript 中的电子邮件验证

当作为另一个数组的索引传递时更改数组元素

c++ - 指向 4 维数组的指针

php - 是否可以将 JSON 私钥转换为 PKCS12 格式?

java - 将 JSON 对象转换为 Java 中的简单变量