一道题 怎么解比较好

给定
[[{'name': 'name1', date:'2018-1-1'}], [{'name': 'name2', 'date': '2018-2-1'}], [{'name':'name3', 'date': '2018-1-1'}]]

写一个js方法输出

{

'2018-1-1': [{'name': 'name1'}, {'name':'name3'}],

'2018-2-1': [{'name': 'name2'}],

}

我是这么写的也能解决 怎么能比较优雅

function  getObj(arr) {

    let  obj  = {}

    arr.forEach(item => {

        const  tar =  item[0]

        const  key =  tar.date

        delete  tar.date

        if (!obj[key]) {

        obj[key] = []

        }

        obj[key].push(tar)

    })

    console.log(obj);

    return  obj

}
阅读 1.5k
3 个回答

这样?

var arr = [[{'name': 'name1', date:'2018-1-1'}, {'name': 'name11', date:'2018-1-1'}], [{'name': 'name2', 'date': '2018-2-1'}], [{'name':'name3', 'date': '2018-1-1'}, {'name': 'na2me1', date:'2018-1-1'}]];

function  getObj(arr, num = 2) {
    let  re  = {}
    arr.flat(num).forEach((item) => {
        let {date, ...o} = item;
        
        re[date] = (re[date] || []).concat(o);
    });
    return  re;
}

getObj(arr);
const arr = [[{'name': 'name1', date:'2018-1-1'}], [{'name': 'name2', 'date': '2018-2-1'}], [{'name':'name3', 'date': '2018-1-1'}]]
let obj = {};
arr.forEach(item => {
    item.forEach(every => {
        if(obj[every.date]) {
            obj[every.date].push({
                name: every.name
            })
        } else {
            obj[every.date] = [{
                name: every.name
            }]
        }
    })
})

flat + reduce 实现;

var arr = [[{'name': 'name1', date:'2018-1-1'}], [{'name': 'name2', 'date': '2018-2-1'}], [{'name':'name3', 'date': '2018-1-1'}]];


arr.flat().reduce((prev, curr) => {  
  prev[curr.date] = [{name: curr.name}, ...(prev[curr.date] || []) ] 
  return prev  
}, {})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题