js篇--数组的常用操作(ES6)

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

 


版权声明:本文为gongpan2468原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。