JS 如何将以下数组相同id或key值的value拼在一起?

1671527598872.png

期望效果如下

spData:[
        {key: '颜色', productAttributeId: '1602859781385658370', value: '黑色,白色'}, 
        {key: '重量', productAttributeId: '1602859944225316866', value: '25KG'}
]
阅读 1.7k
2 个回答
let arr = [
    {
    spData: [
        { key: '颜色', productAttributeId: '1602859781385658370', value: '黑色' },
        { key: '重量', productAttributeId: '1602859944225316866', value: '25KG' }]
    },
    {
    spData: [
        { key: '颜色', productAttributeId: '1602859781385658370', value: '白色' },
        { key: '重量', productAttributeId: '1602859944225316866', value: '25KG' }]
    }
]
let spDataArr = arr.map(({spData}) => spData)
let spData = spDataArr.splice(0, 1)[0]
spDataArr.forEach((v, i) => {
    v.forEach((it, ind) => {
        // 之前以为是将每个数组的第一项和第二项分别合到一起
        // for (let k in it) {
        //     !spData[ind][k].split(',').includes(it[k]) && (spData[ind][k] = spData[ind][k] + ',' + it[k])
        // }
        // 看了标题才知道是将数组相同id或key值的value拼在一起,所以调整了下
        ((spData[ind]['key'] === it['key'] || spData[ind]['productAttributeId'] === it['productAttributeId']) && !spData[ind]['value'].split(',').includes(it['value'])) && (spData[ind]['value'] = spData[ind]['value'] + ',' + it['value'])
    })
})
console.log(spData)
  var arr = [];
  data.forEach((item) => {
    item.spData.forEach((ele) => {
      var obj = arr.find((item) => {
        return item.key == ele.key;
      });
      if (obj) {
        obj.value += "," + ele.value;
      } else {
        arr.push(ele);
      }
    });
  });
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题