工作中遇到的前端JS问题

1.写一个函数,数组合并, 对数组成员相同项(名称、单位、排序、单价相同)合并为一项(合并数量金额),得到合并后数组。

 [ {
  "名称": '商品一',
    "排序": '10011',
    "单位": '吨',
    "数量": 5,
    "单价": '2.70',
    "金额": '13.50',
  },
  {
    "名称": '商品二',
    "排序": '20011',
    "单位": '吨',
    "数量": 5,
    "单价": '0.85',
    "金额": '4.25',
  },
  {
    "名称": '商品一',
    "排序": '10011',
    "单位": '吨',
    "数量": 5,
    "单价": '2.70',
    "金额": '13.50',
  },
  {
    "名称": '商品三',
    "排序": '20051',
    "单位": '吨',
    "数量": 5,
    "单价": '0.40',
    "金额": '2.00',
  },
  {
    "名称": '商品二',
    "排序": '20011',
    "单位": '吨',
    "数量": 5,
    "单价": '0.85',
    "金额": '4.25',
  }]

2.写一个函数,对接口 examp 发出 n 次请求,要求除了第一次请求,往后每次请求都等待上次请求完成并等待50毫秒再进行请求,所有请求结束后,打印出结果。
已对请求进行封装如下:


const getData = function (url, callback) {
setTimeout(() => {
if ("function" === typeof callback) {
callback(+new Date())
}
}, +(Math.random() * 1000).toFixed())
}

 let list = [ {
  "名称": '商品一',
    "排序": '10011',
    "单位": '吨',
    "数量": 5,
    "单价": '2.70',
    "金额": '13.50',
  },
  {
    "名称": '商品二',
    "排序": '20011',
    "单位": '吨',
    "数量": 5,
    "单价": '0.85',
    "金额": '4.25',
  },
  {
    "名称": '商品一',
    "排序": '10011',
    "单位": '吨',
    "数量": 5,
    "单价": '2.70',
    "金额": '13.50',
  },
  {
    "名称": '商品三',
    "排序": '20051',
    "单位": '吨',
    "数量": 5,
    "单价": '0.40',
    "金额": '2.00',
  },
  {
    "名称": '商品二',
    "排序": '20011',
    "单位": '吨',
    "数量": 5,
    "单价": '0.85',
    "金额": '4.25',
  }];
  function fn(list, keys, keys2) {
    let _list = [];
    if (keys && keys.length > 0) {
      list.forEach(item => {
        let res = _list.find(data => {
          let flag = true;
          for (let i = 0; i < keys.length; i ++) {
            if (item[keys[i]] != data[keys[i]]) {
              flag = false;
              break;
            }
          }
          return flag;
        });
        if (res) {
          keys2.forEach(key => {
            res[key] = res[key] * 1 + item[key] * 1;
          });
        } else {
          _list.push(item);
        }
      });
    }
    return _list;
  }
  console.log(fn(list, ["名称" ,"单位","排序", "单价"], ["金额", "数量"]));
    const test = [{
        "名称": '商品一',
        "排序": '10011',
        "单位": '吨',
        "数量": 5,
        "单价": '2.70',
        "金额": '13.50',
    }, {
        "名称": '商品二',
        "排序": '20011',
        "单位": '吨',
        "数量": 5,
        "单价": '0.85',
        "金额": '4.25',
    }, {
        "名称": '商品一',
        "排序": '10011',
        "单位": '吨',
        "数量": 5,
        "单价": '2.70',
        "金额": '13.50',
    }, {
        "名称": '商品三',
        "排序": '20051',
        "单位": '吨',
        "数量": 5,
        "单价": '0.40',
        "金额": '2.00',
    }, {
        "名称": '商品二',
        "排序": '20011',
        "单位": '吨',
        "数量": 5,
        "单价": '0.85',
        "金额": '4.25',
    }]

    const getRes = (test) => {
        const check = ["名称", "排序", "单位", "单价"]
        const res = []
        //遍历原数组,cur表示遍历对象
        test.map(cur => {
            //遍历结果数组res,用re表示遍历对象,与原数组当前对象cur比较,返回四个key都相同的那个对象,find返回结果为ture才会返回对应对象。
            const resItem = res.find(re => {
                let flag = true
                //四个值有一个不相同就改flag为false返回,都相同就返回true返回,然后resItem等于我们要找的对象。
                check.map(key => {
                    if (cur[key] !== re[key]) {
                        flag = false
                    }
                })
                return flag
            })
            //说明当前结果数组还没有同类型的,将cur加入结果数组
            if (resItem === undefined) {
                res.push(cur)
            } else {
                // 如果存在同类型的,与cur进行加法运算
                resItem['数量'] += cur['数量']
                resItem['金额'] = String(Number(resItem['金额']) + Number(cur['金额']))
            }
        })
        return res
    }

    console.log(getRes(test))

for (let item of arr) {
if(newarr.length==0){
newarr.push(item)
}else{
for (let ele of newarr) {
if(item.name==ele.name){//条件
}
}

}

}

思路简单一点,遍历,符合条件的移除,计算值。