1,题目
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:'魅蓝note5', value: 1, type: 4, date: '2018-06-07T08:00:01.589Z' },
{name:'魅蓝note2', value: 5, type: 4, date: '2018-06-02T08:07:01.589Z' },
{name:'魅蓝note2', value: 6, type: 4, date: '2018-06-07T08:00:01.589Z' },
{name:'魅蓝note3', value: 1, type: 4, date: '2018-06-05T08:00:01.589Z' },
{name:'魅蓝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' }
];
/**
* 请用您认为最优化的方式,将arr中的type为4的数据过滤出来,
* 然后按相同的 name + date(按天)合并value(value累加),
* 然后按 value 降序(从大到小)排序,
* 最后每行按照 "${name},${本地日期},售出${sum(value)}部" 的格式,如:"小米2,2017年06月08日,售出5部", 打印(console.log)出来。
* 可以使用第三方js库,可以使用es6。
* 请在半小时内完成。**/
代码如下:
<script>
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:'魅蓝note5', value: 1, type: 4, date: '2018-06-07T08:00:01.589Z' },
{name:'魅蓝note2', value: 5, type: 4, date: '2018-06-02T08:07:01.589Z' },
{name:'魅蓝note2', value: 6, type: 4, date: '2018-06-07T08:00:01.589Z' },
{name:'魅蓝note3', value: 1, type: 4, date: '2018-06-05T08:00:01.589Z' },
{name:'魅蓝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' }
];
// 请用您认为最优化的方式,将arr中的type为4的数据过滤出来,
let arr1 = arr.filter( item => {
item.date = item.date.split('T')[0]
return item.type == 4
})
console.log('type 为4 的数据:')
console.log(arr1)
// 然后按相同的 name + date(按天)合并value(value累加),
let nameList = {}
arr1.forEach(item => {
let title = item.name + '_' + item.date
if (title in nameList) {
nameList[title] = nameList[title] + item.value
} else {
nameList[title] = item.value
}
})
let newArr = []
for (it in nameList) {
newArr.push({name: it.split('_')[0], date: it.split('_')[1], value: nameList[it]})
}
console.log('合并后:')
console.log(newArr)
// 然后按 value 降序(从大到小)排序
newArr.sort(function(a,b){return a.value>b.value ? -1 : 1;});
console.log('排序后:')
console.log(newArr)
// 最后每行按照 "${name},${本地日期},售出${sum(value)}部" 的格式,如:"小米2,2017年06月08日,售出5部", 打印(console.log)出来。
newArr2 = newArr.map(item => {
// 只打印的话用forEach
console.log('售出详情')
console.log(`${item.name},${item.date},售出${item.value}部`)
return `${item.name},${item.date},售出${item.value}部`
})
console.log('售出详情')
console.log(newArr2)
</script>该题包含了
forEach:遍历数组
filter,对数组进行筛选
map,对数组各项的格式进行调整,比如拼接成新的字符串,或者加减乘除运算
sort,排序
其余几个比较好用的
1,... 对两个数组进行合并
let arr_a = [{name: "gong", age: 18}, {name: "pan", age: 20}]
let arr_b = [{name: "piao", age: 22}, {name: "yong", age: 28}]
let arr_c = [...arr_a, ...arr_b]
console.log("合并后:")
console.log(arr_c)2,set 对数组去重
let arr3 = [1,2,3,4,6,1,2,3,4,5,6,5,5,6,66]
let set1 = Array.from(new Set(arr3))
console.log(set1)3,fill填充数组,主要用于对数组的初始化
// 一个新数组
let arr_g = new Array(4).fill(8)
console.log(arr_g)
// [8, 8, 8]
// 老数组各项更改为同一值
let arr_j = [1,2,3]
arr_j.fill(7)
console.log(arr_j)
// [7, 7, 7]4,includes,some 判断数组是否包含某项,及object 的数组如何判断包含·
// 普通数组
console.log([1,2,3].includes(3))
// 含有object的数组,判断是否包含某项
console.log(arr_c)
/* [{name: "gong", age: 18},
{name: "pan", age: 20},
{name: "piao", age: 22},
{name: "yong", age: 28}]
*/
let result = arr_c.some(item => {
if (item.name == 'piao') {
return true
}
})
console.log(result)
// 完全包含某项,若object顺序不对,也无法匹配,其实就是都转化为字符串再进行完全匹配
let result2 = JSON.stringify(arr_c).indexOf(JSON.stringify({name: "piao", age: 22}))==1
console.log(result)
// true
let result3 = JSON.stringify(arr_c).indexOf(JSON.stringify({age: 22, name: "piao"}))==1
console.log(result3)
// false