数组对象处理,根据两个维度处理数据

数据源格式:

    const sourceData = [

      { name: "张三", buy: "洗衣液", money: 18, time: 180 },
      { name: "张三", buy: "凝珠", money: 34, time: 173 },
      { name: "李四", buy: "洗衣液", money: 28, time: 160 },
      { name: "李四", buy: "凝珠", money: 12, time: 173 },
      { name: "李四", buy: "洗衣粉", money: 78, time: 173 },
      { name: "王五", buy: "洗衣粉", money: 38, time: 170 }

    ]


希望得到数据格式:
       data = [
      { name: "张三", money0: 18, time0: 180, time1: 173, money1: 34, },
      { name: "李四", money0: 28, time0: 160, money1: 12, time1: 173, money2: 78, time2: 173 },
      { name: "王五", money2: 38, time2: 170}
]

数据处理:
 

 const sourceData = [

      { name: "张三", buy: "洗衣液", money: 18, time: 180 },
      { name: "张三", buy: "凝珠", money: 34, time: 173 },
      { name: "李四", buy: "洗衣液", money: 28, time: 160 },
      { name: "李四", buy: "凝珠", money: 12, time: 173 },
      { name: "李四", buy: "洗衣粉", money: 78, time: 173 },
      { name: "王五", buy: "洗衣粉", money: 38, time: 170 }

    ]
    // 根据这两个维度区分和命名
    const name = ['张三', '李四', "王五",];
    const buy = ['洗衣液', '凝珠', '洗衣粉'];

    function tansData(sourceData, name, buy) {
      //1.定一个二维数组的最外层
      const dblAry = []

      let temName = []
      let temBuy = []
      //2.遍历传过来的包含对象的大数组
      var aIn = 0
      for (let i = 0; i < sourceData.length; i++) {

        let Ary = {}

        if (temName.indexOf(sourceData[i].name) == -1) {
          // 3.第一次出现的name,生成内部新对象Ary
          temName.push(sourceData[i].name);
          Ary["name"] = sourceData[i].name

          if (temBuy.indexOf(sourceData[i].buy) == -1) {
            // 4.第一次出现的给每一个name对应的对象,添加对应的money和time
            let id = buy.findIndex(item => item == sourceData[i].buy)
            console.log('id', id)
            temBuy.push(sourceData[i].buy)
            Ary["money" + id] = sourceData[i].money
            Ary["time" + id] = sourceData[i].time
          } else {
            ;
            let id = buy.findIndex(item => item == sourceData[i].buy)

            Ary["money" + id] = sourceData[i].money
            Ary["time" + id] = sourceData[i].time
          }
          // 添加新对象到数组中
          dblAry.push(Ary)

        } else {
          // 4.给不是第一次出现的,每一个name对应的对象,添加对应的money和time
          let nameId = name.findIndex(item => item == sourceData[i].name)
          if (temBuy.indexOf(sourceData[i].buy) == -1) {
            let id = buy.findIndex(item => item == sourceData[i].buy)
            console.log('id', id)
            temBuy.push(sourceData[i].buy)
            // 6.给对应的每对象添加money和time属性和值
            dblAry[nameId]["money" + id] = sourceData[i].money;
            dblAry[nameId]["time" + id] = sourceData[i].time;
          } else {

            let id = buy.findIndex(item => item == sourceData[i].buy)
            dblAry[nameId]["money" + id] = sourceData[i].money;
            dblAry[nameId]["time" + id] = sourceData[i].time;
          }
        }

      }
      return dblAry
    }
    console.log(tansData(sourceData, name, buy));

猜你喜欢

转载自blog.csdn.net/CSSAJBQ_/article/details/133387040