0

我希望能够根据字符串中的第一个单词对 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
4

4 回答 4

1
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);

演示

于 2013-02-11T17:50:06.207 回答
1
  1. 排序回调应返回负数、0、正数,具体取决于参数 1 是小于、等于还是大于参数 2
  2. 排序是在原件上完成的,因此您不必“分配”结果
  3. 您可以使用正则表达式提取第一个单词(我不明白您为什么要这样排序)
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);
});
于 2013-02-11T17:45:03.020 回答
1

您可以使用Array.sort比较功能。请参阅https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/sort

于 2013-02-11T17:39:21.250 回答
0

如果您在第一项不大于第二项时返回 -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; 
};
于 2013-02-11T17:41:51.760 回答