js数组转换数据?

`

  // 根据name和value生成新的数据
  const specification = [
    {
      name: '颜色',
      value: ['白色', '绿色', '黄色']
    },
    {
      name: '尺寸',
      value: ['L', 'M']
    }
  ]
  
  // 需要转换成对应格式
  const specification = [{
    specifications: [
      {
        key: '颜色',
        value: '白色'
      },
      {
        key: '尺寸',
        value: 'L'
      }
    ]
  },
  {
    specifications: [
      {
        key: '颜色',
        value: '绿色'
      },
      {
        key: '尺寸',
        value: 'M'
      }
    ]
  }] 

`

`

  // 处理数据
  for (let a = 0; a < specification.length; a++) {
    if (specification[a].value) {
      specification[a].specifications = []
      const value = specification[a].value

      for (let b = 0; b < value.length; b++) {
        const json = {
          key: specification[a].name,
          value: specification[a].value[b]
        }
        specification[a].specifications.push(json)
      }
    }
  }
  
  // 处理后的数据, 全部push在同一个数组中了
  const specification = [
    {
      specifications: [
        { key: '颜色', value: '白色' },
        { key: '颜色', value: '绿色' },
        { key: '颜色', value: '黄色' }
      ]
    }
  ]

`

阅读 1.7k
1 个回答

确定 specification是只有2个纬度吗?如果是的可以用二维数组的方式搞一把

let specificationArr = [];

specification.map(item=>{
  let valueArr = item.value;
  let valObjArr = valueArr.map(val=>{
       return {
         key:item.name,
         value:val
       }
   })
  specificationArr.push(valObjArr)
})

// 然后处理二维数组的 笛卡尔积

let one = specificationArr[0];
let two = specificationArr[1];
let res = one.map(i=>{
   let arr = two.map(j=>{
      return [
        i,
        j
      ] 
   })
   return {
        specifications:arr
   }
})

// console.log(res); // 这个应该是你想要的结果
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题