按int,然后按字母顺序对对象数组进行排序

Sort array of objects by int, then by alphabetical

本文关键字:对象 数组 排序 顺序 int 然后      更新时间:2023-09-26

我有一个数组,其中包含一些关于状态特征的各种信息,需要用几种方法对其进行修改。首先,如果区域相同,我需要按区域排序,然后按名称排序。所以我使用parseInt来获得实际的int,而不是字符串,但现在我迷路了。我该如何做到这一点?我还需要找到填充最多/最少的状态,并将其存储在变量中。

(function() {
'use strict';
var states = [{
    "name": "Alaska",
    "area": "663,268 sq mi",
    "population": 735132
}, {
    "name": "California",
    "area": "163,696 sq mi",
    "population": 38332521
}, {
    "name": "oregon",
    "area": "98,381 sq mi",
    "population": 3899353
}, {
    "name": "washington",
    "area": "71,300 sq mi",
    "population": 6971406
}];
var moddedStates = {};
for (var i = 0; i < states.length; i++) {
    var area = parseInt(states[i].area);
}
}());

我相信这个片段可以实现您想要的一切。请注意使用replace来说明逗号,并使用parseFloat而不是parseInt,以防某些大小包含小数点右侧的数字。(在比较美国各州的规模时,这可能不是一个问题,但这是一个很好的习惯…)

(function() {
    'use strict';
    
    var states = [{
        "name": "Alaska",
        "area": "663,268 sq mi",
        "population": 735132
    }, {
        "name": "California",
        "area": "163,696 sq mi",
        "population": 38332521
    }, {
        "name": "oregon",
        "area": "98,381 sq mi",
        "population": 3899353
    }, {
        "name": "washington",
        "area": "71,300 sq mi",
        "population": 6971406
    }];
    
    var mostPopulated = null;
    var leastPopulated = null;
    states.sort(function (a, b) {
        var aArea = parseFloat(a.area.replace(/,/g, ''));
        var bArea = parseFloat(b.area.replace(/,/g, ''));
        if (aArea < bArea) return -1;
        else if (bArea < aArea) return 1;
        else if (a.name < b.name) return -1;
        else if (b.name < a.name) return 1;
        else return 0;
    });
    
    for (var i = 0, len = states.length; i < len; i++) {
        if (!mostPopulated || states[i].population > mostPopulated.population) {
            mostPopulated = states[i];
        }
        if (!leastPopulated || states[i].population < leastPopulated.population) {
            leastPopulated = states[i];
        }
    }
    
    console.log(states);
    console.log(mostPopulated);
    console.log(leastPopulated);
}());