首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按实数值js按降序排列数组

按实数值js按降序排列数组
EN

Stack Overflow用户
提问于 2021-02-24 11:04:21
回答 2查看 52关注 0票数 0

我从一个文本框中获取输入:

代码语言:javascript
复制
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

js代码:

代码语言:javascript
复制
            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

我尝试了一种来自互联网的解决方案,它处理整数,但不使用实数:

代码语言:javascript
复制
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 + ", ";
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-24 11:50:42

来自文本框的数据是字符串,甚至是数字。如果对字符串"125.20""13.20"进行排序,它们是按字母顺序排序的,所以"125.20"排在第一位,因为2位于3之前。

您需要做的是使用parseFloat函数将数字转换为实际数字,然后将它们存储在数组中:

代码语言:javascript
复制
                var word4       = parseFloat(words[3]);
票数 1
EN

Stack Overflow用户

发布于 2021-02-24 11:15:37

在您的代码中,myarray实际上不是一个数组,而是一个对象。如果进行此更改,按值排序并连接键/值是非常容易的:

代码语言:javascript
复制
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完成,然后上面的解决方案仍然有效:

代码语言:javascript
复制
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)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66349575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档