題目:
var arr = [
{ name: '小米1', value: 1, type: 2, date: '2018-06-07T08:00:01.589Z' },
{ name: '錘子T1', value: 1, type: 2, date: '2018-06-07T08:10:01.589Z' },
{ name: '小米2', value: 1, type: 4, date: '2018-06-07T20:00:01.589Z' },
{ name: '小米2', value: 4, type: 4, date: '2018-06-07T20:10:21.189Z' },
{ name: '小米4', value: 1, type: 4, date: '2018-06-07T08:00:01.560Z' },
{ name: '小米4', value: 2, type: 4, date: '2018-06-07T08:10:31.584Z' },
{ name: '小米6', value: 1, type: 3, date: '2018-06-07T08:00:01.589Z' },
{ name: '小米5s', value: 1, type: 4, date: '2018-06-07T08:00:01.589Z' },
{ name: '錘子T2', value: 1, type: 4, date: '2018-06-07T08:00:01.589Z' },
{ name: '錘子T1', value: 4, type: 4, date: '2018-06-07T08:06:01.589Z' },
{ name: '魅藍(lán)note5', value: 1, type: 4, date: '2018-06-07T08:00:01.589Z' },
{ name: '魅藍(lán)note2', value: 5, type: 4, date: '2018-06-02T08:07:01.589Z' },
{ name: '魅藍(lán)note2', value: 6, type: 4, date: '2018-06-07T08:00:01.589Z' },
{ name: '魅藍(lán)note3', value: 1, type: 4, date: '2018-06-05T08:00:01.589Z' },
{ name: '魅藍(lán)note', value: 1, type: 4, date: '2018-06-07T08:00:01.589Z' },
{ name: 'oppor9', value: 7, type: 4, date: '2018-06-04T08:04:01.588Z' },
{ name: '華為p9', value: 1, type: 4, date: '2018-06-02T08:00:01.577Z' },
{ name: '華為p9', value: 2, type: 4, date: '2018-06-07T08:00:01.110Z' },
{ name: '華為p10', value: 1, type: 1, date: '2018-06-07T08:00:01.534Z' }
];
- 請(qǐng)用您認(rèn)為最優(yōu)化的方式屹篓,將arr中的type為4的數(shù)據(jù)過(guò)濾出來(lái),
- 然后按相同的 name + date(按天)合并value(value累加)混巧,
- 然后按 value 降序(從大到小)排序细睡,
- 最后每行按照
${name},${本地日期},售出${sum(value)}部"
的格式,如:"小米2,2017年06月08日,售出5部", 打印(console.log)出來(lái)忍宋。 - 可以使用第三方j(luò)s庫(kù)痕貌,可以使用es6。
- 請(qǐng)?jiān)诎胄r(shí)內(nèi)完成糠排。
要求最后輸出結(jié)果樣例如下:
oppor9,2017年06月04日,售出7部
魅藍(lán)note2,2017年06月07日,售出6部
魅藍(lán)note2,2017年06月02日,售出5部
小米2,2017年06月08日,售出5部
......
方案:
var newArr1 = arr.filter(item => item.type === 4); // 1. 將arr中type為4的數(shù)據(jù)過(guò)濾出來(lái)
var newArr2 = mergeArray(newArr1); // 2. 按相同的name + date(按天)合并value(value累加)
var newArr3 = newArr2.sort((a, b) => b.value - a.value); // 3. 按value降序(從大到卸娉怼)排序
printArrar(newArr3); // 4. 每行按照name,本地日期入宦,售出X部的格式哺徊,打印出來(lái)
// 按相同的name + date(按天)合并value(value累加)
// 數(shù)組的下標(biāo)可以是字符串
function mergeArray(source) {
var temp = [];
source.forEach(item => {
var key = item.name + item.date.slice(0, 10);
if (typeof temp[key] === 'undefined') {
temp[key] = item;
} else {
temp[key].value += item.value;
}
});
var result = [];
for (var i in temp) {
result.push(temp[i]);
}
return result;
}
// 每行按照name,本地日期乾闰,售出X部的格式落追,打印出來(lái)
function printArrar(array) {
array.forEach(item => {
var date = item.date.slice(0, 10).split('-');
console.log(`${item.name},${date[0]}年${date[1]}月${date[2]}日,售出${item.value}部`);
});
}
知識(shí)點(diǎn):數(shù)組的下標(biāo)涯肩,可以是字符串