JS数组筛选问题

var data = [
    {'zimu': 'A', 'title': 123},
    {'zimu': 'A', 'title': 1234},
    {'zimu': 'A', 'title': 12345},
    {'zimu': 'B', 'title': 234},
    {'zimu': 'B', 'title': 2345},
    {'zimu': 'C', 'title': 345},
    {'zimu': 'D', 'title': 456}
 ]

筛选为

   data = [
       {'letter': 'A' , 'data' : [123,1234,12345]},
       {'letter': 'B' , 'data' : [234,2345]},
       {'letter': 'C' , 'data' : [345]},
       {'letter': 'D' , 'data' : [456]},
   ]



阅读 2.3k
2 个回答
const result = Object.values(
    data.reduce((obj, cur) => {
        if (obj[cur.zimu]) {
            obj[cur.zimu].data.push(cur.title);
        } else {
            obj[cur.zimu] = {
                letter: cur.zimu,
                data: [cur.title]
            };
        }
        return obj;
    }, {})
);
console.log(result);
output:

clipboard.png


增加排序功能

const result = Object.values(
    data.reduce((obj, cur) => {
        if (obj[cur.zimu]) {
            obj[cur.zimu].data.push(cur.title);
        } else {
            obj[cur.zimu] = {
                letter: cur.zimu,
                data: [cur.title]
            };
        }
        return obj;
    }, {})
).sort((a, b) => {
    let letterA = a.letter.toLowerCase(),
        letterB = b.letter.toLowerCase();
    return letterA > letterB ? 1 : letterA === letterB ? 0 : -1;
});
console.log(result);
let info = {}
let result = []
data.forEach(item => {
  if (!info[item.zimu]) {
    info[item.zimu] = { letter: item.zimu, data: [] }
    result.push(info[item.zimu])
  }
  info[item.zimu].data.push(item.title)
})
console.log(JSON.stringify(result))
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题