javascript - 如何使用forEach循环javascript对对象数组进行排序

标签 javascript arrays sorting object foreach

<分区>

我有一个如下所示的数组:

order = [ "foo", "bar", "baz" ];

此数组包含我想作为对象数组排序依据的属性值。我想对数据进行排序,以便所有名称为“foo”的对象排在第一位,然后是“bar”,然后是“baz”。我的对象数组看起来像这样:

data = [ 
    {name: "foo", score: 8},
    {name: "baz", score: 4},
    {name: "baz", score: 9}, 
    {name: "foo", score: 6}, 
    {name: "bar", score: 9} 
];

我希望数据顺序的结果看起来像这样,数组按名称排序,但当名称相同时也按分数 desc 排序:

sortedData =  [ 
    {name: "foo", score: 8},
    {name: "foo", score: 6},  
    {name: "bar", score: 9},
    {name: "baz", score: 9},
    {name: "baz", score: 4} 
];

这是我到目前为止尝试过的代码:

order.forEach(name => {
      sortedData = [...this.data].sort(function(obj1, obj2) {
            return (
              -(obj1.name)  || obj2.score < obj1.score
            );
          });
        });
console.log(sortedData);

最佳答案

您可以简单地使用sortindexOf

let order = [ "foo", "bar", "baz" ];

let data = [ 
    {name: "foo", score: 8},
    {name: "baz", score: 4},
    {name: "baz", score: 9}, 
    {name: "foo", score: 6}, 
    {name: "bar", score: 9} 
];

let op = data.sort((a,b)=> (order.indexOf(a.name) - order.indexOf(b.name)) || b.score - a.score )

console.log(op)

关于javascript - 如何使用forEach循环javascript对对象数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55326268/

相关文章:

ruby-on-rails - Ruby 数组方法 assoc 和 associates 的目的是什么?

C : Input file does not sort in array

javascript - 幻灯片 div javascript

javascript - Javascript 中如何判断字符串是否包含多字节字符?

javascript - 在 foreach 循环中将 PHP 值 (ACF) 添加到 Javascript 数组

python - 在python 3中重复排序

algorithm - 随机快速排序

javascript - js - 数组 .reduce 返回 NaN 而不是计算值

javascript - 如何在 Node.js 中同步处理用户输入

javascript - 如何获取 JSON 数组中的 JSON 对象名称