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){//条件
}
}
}
}
思路简单一点,遍历,符合条件的移除,计算值。