按浮点值排序数组

时间:2017-07-14 10:04:15

标签: javascript arrays node.js sorting

我在使用浮点值排序数组时遇到了一些麻烦。我在网上搜索过,我明白我必须使用比较函数,但是我在理解这个概念时遇到了问题。

我正在使用此代码读取xlxs文件并将我需要的值推送到更简单的数组。我需要通过top2box键的值对此数组进行排序,因此最高值为键0。

这是我目前的代码

// data is an array of arrays, lets loop through it to sort. The array contains each row of my xlxs file.

    var hon = [] //array that will hold the sorted entries from the excel file        

    for(var i = 0; i < data.length; i++) {

        // we dont want empty data. each row has a key named Business Unit. In empty rows the value of the key is the name of the key. We dont need that data.
        if (data[i][3] != '' && data[i][0] != 'Business Unit') {

            // data belongs to an actual person
            // round top2box to display the percentage.

            // push the values we need to a simpler array
            hon.push({
                country: data[i][0],
                team: data[i][2],
                name: data[i][3],
                top2box: data[i][4],
                sumofvotes: data[i][5]
            })
        }
    }

    // loop done lets sort each array entry by top2box value. So highest top2box is the first entry of the array
    hon.sort(function(a,b) { return a.top2box - b.top2box;});

    // show the result.
    console.log(JSON.stringify(hon, null, 4));

但是,在显示结果时,所有top2box条目都已更改为&#34; 1&#34;并且没有排序(可能由于这个原因)

hon的值是一个浮点数,稍后需要以百分比显示。以下是一些示例值。我需要保持这些确切的值,但是将它们从最高到最低排序,这样我就可以遍历数组并稍后将它们显示为html。

"country": "Norway",
"team": "NO-Aftersales",
"name": "Andersen, Dennis",
"top2box": "0.47368421052631599",
"sumofvotes": "19"

这是另一个

"country": "Sweden",
"team": "SE-AS",
"name": "Vuong, Adele",
"top2box": "0.51515151515151503",
"sumofvotes": "33"

结果是JSON.stringify();是问题的根源。从console.log中删除它。所以它取而代之的是console.log(hon)显示正确的数据并正确排序它们。 Json stringify并没有很好地处理花车。

1 个答案:

答案 0 :(得分:1)

你需要像这样保存'sort'的结果:

var hon = [
{
    country: 'some country',
    team: 'some team',
    name: 'some name',
    top2box: 123123,
    sumofvotes: 123123
},
{
    country: 'some country2',
    team: 'some team2',
    name: 'some name2',
    top2box: 123,
    sumofvotes: 123
}
];

hon = hon.sort((a, b) => {return a.top2box - b.top2box}); // save the sort result
// (a - b) = Ascending sort, (b - a) = Descending sort

console.log(hon);

您可以在此处详细了解排序 - Array#Sort以及此处的箭头功能 - Functions#ArrowFunctions