我从一个文本框中获取输入:
1 ziro = 8.60
2 passighat = 7.70
3 bomdila = 5.30
4 sankalan = 1.20
5 shipgyar = 1.20
6 yuksom = 0.40
7 beki_mathungari = 125.20
8 hazuah = 36.40
9 melabazar/matunga = 13.20js代码:
var summary_table_content = $('#textbox').val();
var array1 = summary_table_content.split('\n');
var myarray = [];
for (i = 0; i < array1.length; i++) {
var line = array1[i];
var words = line.split(' ');
var word2 = words[1];
var word4 = words[3];
myarray[word2] = word4;
}现在,我想按值降序排列myarray,并按如下方式打印:
beki_mathungari 125.20,hazuah 36.40,melabazar/matunga 13.20,ziro 8.60,钝化7.70,轰炸机5.30,桑卡兰1.20,舰船1.20,尤克松0.40
我尝试了一种来自互联网的解决方案,它处理整数,但不使用实数:
var tuples = [];
for (var key in myarray) tuples.push([key, myarray[key]]);
tuples.sort(function(a, b) {
a = a[1];
b = b[1];
return a < b ? -1 : (a > b ? 1 : 0);
});
for (var i = 0; i < tuples.length; i++) {
var key = tuples[i][0];
var value = tuples[i][1];
document.getElementById('id1').innerHTML += key + " " + value + ", ";
}发布于 2021-02-24 11:50:42
来自文本框的数据是字符串,甚至是数字。如果对字符串"125.20"和"13.20"进行排序,它们是按字母顺序排序的,所以"125.20"排在第一位,因为2位于3之前。
您需要做的是使用parseFloat函数将数字转换为实际数字,然后将它们存储在数组中:
var word4 = parseFloat(words[3]);发布于 2021-02-24 11:15:37
在您的代码中,myarray实际上不是一个数组,而是一个对象。如果进行此更改,按值排序并连接键/值是非常容易的:
var myarray = {};
myarray["ziro"] = 8.60;
myarray["passighat"] = 7.70;
myarray["bomdila"] = 5.30;
myarray["sankalan"] = 1.20;
myarray["shipgyar"] = 1.20;
myarray["yuksom"] = 0.40;
myarray["beki_mathungari"] = 125.20;
myarray["hazuah"] = 36.40;
myarray["melabazar/matunga"] = 13.20;
var result = Object.entries(myarray)
.sort( (a,b) => b[1] - a[1])
.map( ([key,value]) => `${key} ${value.toFixed(2)}`)
.join(", ");
console.log(result)
在更新后进行编辑。您已经将问题更改为如何将字符串转换为数字。这个步骤只需要使用parseFloat完成,然后上面的解决方案仍然有效:
var input = `1 ziro = 8.60
2 passighat = 7.70
3 bomdila = 5.30
4 sankalan = 1.20
5 shipgyar = 1.20
6 yuksom = 0.40
7 beki_mathungari = 125.20
8 hazuah = 36.40
9 melabazar/matunga = 13.20`;
var result = input.split("\n")
.map(x => {
[word0,word1,word2,word3] = x.split(" ");
return [word1,parseFloat(word3)]
})
.sort( (a,b) => b[1] - a[1])
.map( ([key,value]) => `${key} ${value.toFixed(2)}`)
.join(", ");
console.log(result)
https://stackoverflow.com/questions/66349575
复制相似问题