按字符串值和数值以不同方向对项目进行排序(Javascript)

rsl1atfo  于 2023-04-10  发布在  Java
关注(0)|答案(1)|浏览(104)

我有一个对象数组:

var items=  [{
          id: "rev-ar",
          qty: 13,
          effect: [{
           id: "after",
           value: 3}]
        }, {
          id: "rev-plu",
          qty: 2,
          effect: [{
           id: "rev",
           value: 1}]
        }];
//I want to sort it out first by name and then by effect.value so I did this:
var sorted = items.sort((a, b) => { //best revival items
       if(a.id == b.id) {
        return a.effect[0].value - b.effect[0].value;
       } else {
          return a.id - b.id;
       }
            }).filter(m => { return m.id.match('rev-'); });
        
        console.log(sorted);

这首先输出rev-ar,但我想颠倒顺序,所以rev-plu首先出现,所以我这样做了:

return a.id - b.id;

但顺序还是没变为什么呢
谢谢大家。

wa7juj8i

wa7juj8i1#

你减去了id,但它们不是数字

你所写的a.x - b.x适用于属性x,* 如果 * 该属性是一个数字。但在这里,id是一个 * 字符串 *!

要比较字符串,请尝试以下操作:

return a.id.localeCompare(b.id);

反之亦然:

return b.id.localeCompare(a.id);

相关问题