我在使用浮点值排序数组时遇到了一些麻烦。我在网上搜索过,我明白我必须使用比较函数,但是我在理解这个概念时遇到了问题。
我正在使用此代码读取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并没有很好地处理花车。
答案 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