【问题标题】:Sorting An Array Inside An Array Of Objects在对象数组中对数组进行排序
【发布时间】:2023-06-03 03:01:02
【问题描述】:

你好,我有一个这个表格的数组,我在我的流星模板上显示。

var data = [{text_name:'My life', 
score: [{name : 'james',score: 10}, 
        {name : 'john',score : 40},  
        {name : 'Abu',score : 80}]},
        {text_name:'The game real', 
score: [{name : 'penny',score: 30} 
        {name : 'john',score : 20} , 
        {name : 'Abu',score : 30}] }]

我想对score 键进行排序,该键是按降序排列的对象数组。使用 text_name:'My life' 中的示例数据,我希望 Abu 得分首先显示,因为他得分最高。

我已尝试使用此链接Sorting an array of JavaScript objects 上的代码进行排序。

【问题讨论】:

  • 这不是有效的 JavaScript。请修复,以便我们知道您的意思(是score:[...?)另外,如果您尝试过,请发布问题所在。 还有,为什么要标记meteor
  • 这不是有效的 JavaScript。第一个score: 30} 后缺少逗号。

标签: javascript arrays sorting dictionary


【解决方案1】:

如果我理解正确,您要做的是让每个列表在其内部进行排序。

这就是你需要做的:

// iterate over data
for (var i = 0; i < data.length; i++) {
  var item = data[i];
  // sort the item's score
  item.score.sort(function(a, b) {
    return b.score - a.score;
  });
}

【讨论】:

  • 我能够通过执行 b.score.score - a.score.score 使其工作。非常感谢您的帮助。
【解决方案2】:

尝试使用排序方法:

另外请注意,正如 cmets 所提到的,这不是有效的 JS,我在上面发布的示例中添加了正确的格式。

Working example

var d = data.map(function(d) {
  return d.score.sort(function(a, b) {
    return a.score + b.score;
  });
});

【讨论】: