Javascript - 如何按 3 种不同的属性类型对对象数组进行排序? (字符串、整数、 bool 值)

标签 javascript arrays sorting object

我有对象数组:

var a = [
  {"name": "BBB", "no": 2, "size1": [3], "size2": null },
  {"name": "AAA", "no": 5, "size1": null, "size2": [1] },
  {"name": "BBB", "no": 1, "size1": [2], "size2": null },
  {"name": "AAA", "no": 4, "size1": null, "size2": [1] },
  {"name": "BBB", "no": 1, "size1": null, "size2": [1] },
  {"name": "AAA", "no": 5, "size1": [2], "size2": null },
  {"name": "BBB", "no": 2, "size1": null, "size2": [1] },
];

我想这样排序,按 name 升序排序,然后按 no 升序排序,如果不为 null,则按 size1 排序。

起初,我可以按nameno 排序,但之后我不知道如何按size1大小 2。如果它不为空,它应该首先按 size1 排序。 这是我要排序的代码

function sortObject(arrayObjects){
    arrayObjects.sort(function(a,b){
        if(a.name=== b.name){
            return (a.no - b.no);
        } else if(a.name > b.name){
            return 1;
        } else if(a.name < b.name){
            return -1;
        }
    });
}

预期结果

var a = [
  {"name": "AAA", "no": 4, "size1": null, "size2": [1] },
  {"name": "AAA", "no": 5, "size1": [2], "size2": null },
  {"name": "AAA", "no": 5, "size1": null, "size2": [1] },
  {"name": "BBB", "no": 1, "size1": [2], "size2": null },
  {"name": "BBB", "no": 1, "size1": null, "size2": [1] },
  {"name": "BBB", "no": 2, "size1": [3], "size2": null },
  {"name": "BBB", "no": 2, "size1": null, "size2": [1] },
]

最佳答案

您必须在第一个 if 中比较 no:

function sortObject(arrayObjects){
    arrayObjects.sort(function(a,b){
        if (a.name=== b.name) {
            if (a.no === b.no) {
                // Determines which size to use for comparison
                const aSize = a.size1 || a.size2;
                const bSize = b.size1 || b.size2;

                return (aSize[0] - bSize[0]);
            }
            return (a.no - b.no);
        } else if (a.name > b.name) {
            return 1;
        } else if (a.name < b.name) {
            return -1;
        }
    });
}

关于Javascript - 如何按 3 种不同的属性类型对对象数组进行排序? (字符串、整数、 bool 值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52113626/

相关文章:

javascript - Javascript 数字格式正则表达式不起作用

javascript - onclick 不触发所有观察者的 next()

java - 用于搜索每个对象的内存或用于所有图 block block 的内存哪个更快

javascript - 过滤和排序 JavaScript 数组

python - Pandas 数据框按 3 列和条件搜索

javascript - 水平滚动不适用于 jquery 单击

javascript - 在 Javascript 文件中使用 AngularJS 过滤数组

javascript - 在javascript中使用另一个数组创建数组

java - 在 Java 中对自定义数组列表进行排序

javascript - 当我在 Angular 应用程序中调用 .next() 一次时,主题订阅被触发两次