闲来无趣,来一道有趣的面试题。

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' }];

2.题目: <1>请用您认为最优化的方式,将arr中的type为4的数据过滤出来,

<2>然后按相同的 name + date(按天)合并value(value累加),

<3>然后按 value 降序(从大到小)排序,

<4>最后每行按照 "${name},${本地日期},售出${sum(value)}部" 的格式,如:"小米2,2017年06月08日,售出5部", 打印(console.log)出来。

3.-----------------------------先思考---------------------答案在下------------------------------

4.答案:(不是标准,但是可以的)

function printArr(arr){
    var newArr = arr.filter((item)=>{
        let darr = item.date.substring(0,10).split('-');
        item.date = `${darr[0]}年${darr[1]}月${darr[2]}日`
        return item.type == 4
    })
    var map = newArr.reduce((obj,item)=>{
        let key = item.name +"+"+item.date;
        obj[key] = item.value +(obj[key]|| 0)
        return obj
    },{})

    stateArr = []
    for(let item in map){
        var nowobj = {name:item.split('+')[0],date:item.split('+')[1],value:map[item]}
        stateArr.push(nowobj)
    }

    var sortArr = stateArr.sort((a,b)=>{
       return b.value - a.value
    })

    sortArr.forEach((item)=>{
      console.log(`${item.name},${item.date},售出${item.value}部`)
    })

}

printArr(arr)

   5.控制台效果

猜你喜欢

转载自www.cnblogs.com/mrbabibo/p/11263528.html