根据第一个单词对对象数组进行排序

Sort an array of objects based on first word

本文关键字:数组 排序 对象 第一个 单词      更新时间:2023-09-26

我希望能够根据字符串中的第一个单词在JavaScript中对数组(一个对象数组)进行排序。目前,我使用的排序函数使用字符串中的所有单词。

JSON数据:

"awds": [
    {"awd":"adobe edge award"},
    {"awd":"besty"},
    {"awd":"c award"},
    {"awd":"awwward award"},
    {"awd":"desk award"},
    {"awd":"adobe edge award"},
    {"awd":"creative edge award"},
    {"awd":"snoogle edge award"},
    {"awd":"scuba edge award"},
    {"awd":"xidoe edge award"}
]

JavaScript:

var compareNames = function(a, b) {
    var nameA = a.awd.toLowerCase();
    var nameB = b.awd.toLowerCase();
    if (nameA > nameB) { return 1; }
    return 0;
};

电流输出:

adobe edge award
besty
c award
awwward award
desk award
adobe edge award
creative edge award
snoogle edge award
scuba edge award
xidoe edge award

期望输出:

adobe edge award
adobe edge award
awwward award
c award
creative edge award
scuba edge award
snoogle edge award
xidoe edge award
var o = [
    {"awd":"adobe edge award"},
    {"awd":"besty"},
    {"awd":"c award"},
    {"awd":"awwward award"},
    {"awd":"desk award"},
    {"awd":"adobe edge award"},
    {"awd":"creative edge award"},
    {"awd":"snoogle edge award"},
    {"awd":"scuba edge award"},
    {"awd":"xidoe edge award"}
];
o.sort(function(a, b) {
    var nameA = a.awd.toLowerCase();
    var nameB = b.awd.toLowerCase(); 
    if(nameA === nameB) return 0; 
    return nameA > nameB ? 1 : -1;
});
console.log(o);

演示

您可以使用带有比较功能的Array.sort。看见https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/sort

  1. 排序回调应返回负数、0、正数,具体取决于参数1是否小于、等于或大于参数2
  2. 排序是在原件上完成的,因此您不必"分配"结果
  3. 您可以使用regex来提取第一个单词(我不明白您为什么要这样排序)
awds.sort(function (a, b) {
    var aword = a.awd.toLowerCase().match(/[^ ]+/)[0];
    var bword = b.awd.toLowerCase().match(/[^ ]+/)[0];
    return aword == bword ? 0 : (aword < bword ? -1 : 1);
});

如果在第一个项目不大于第二个项目-时返回-1,则方法将工作

   var compareNames = function(a, b) {    
    var nameA = a.awd.toLowerCase();
    var nameB = b.awd.toLowerCase();
    if(nameA==nameB) return 0;
    return (nameA > nameB)? 1:-1; 
};