javascript - 通过javascript重新排序数组对象

标签 javascript

我已经做了一些排序,但仍然不明白为什么结果是[]。你们能帮我解决我缺少的东西吗?

我有我的原始数组对象:

var data = [
 {message:'hello', username:'user1'},
 {message:'data', username:'user1'},
 {message:'sample', username:'user2'},
 {message:'here', username:'user2'},
];

我的功能是:

var chat = [];
function reorder(obj) {
    obj.forEach( function(val, i) {
        if(typeof chat[val.username] === 'undefined') {
            chat[val.username] = [];
            chat[val.username].push(val);   
        }
        else 
            chat[val.username].push(val);
    });
    return chat;
}

在我的控制台上:

reorder(data);

我期望有:

var data2 = [
  'user1': [{message:'hello', username:'user1'}, {message:'data', username:'user1'} ],
  'user2': [{message:'sample', username:'user2'}, {message:'here', username:'user2'} ],
];

最佳答案

您可以使用reduce轻松完成此操作:

var data2 = data.reduce(function(acc, x) {
  acc[x.username] = (acc[x.username] || []).concat(x)
  return acc
},{})
/*^
{ user1: 
   [ { message: 'hello', username: 'user1' },
     { message: 'data', username: 'user1' } ],
  user2: 
   [ { message: 'sample', username: 'user2' },
     { message: 'here', username: 'user2' } ] }
*/

关于javascript - 通过javascript重新排序数组对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25780311/

相关文章:

javascript - AngularJS 指令匹配

javascript - 如何更改 <TextField> 中 Prop 的样式?

javascript - Sails.js、Nunjucks 和 LiveReload

javascript - 调整游戏音乐的音量

javascript - 使 JavaScript 间隔与实际时间同步

javascript - 主键整数返回在查找时递增

javascript - 计算两个日期之间的差异会导致计算错误

javascript - 像 iAd 一样在 UIWebView 中的 div 内滚动

javascript - Bootstrap 5模态不显示

javascript - 随机div,只显示其中的一部分