【问题标题】:How do I sort a concatenated array in JavaScript?如何在 JavaScript 中对串联数组进行排序?
【发布时间】:2010-06-13 10:36:35
【问题描述】:

我的代码:

var company=new Array("Kestrel Moon:","BB:");
var basicPri=new Array(1165,1231);

for(var i=0;i<15;i++){
var companyTotal=company[i].concat(basicPri[…

document.write(""+companyTotal+"")

它显示在屏幕上:

Kestrel Moon: 1165

BB: 1231

我想对数组进行排序,使其按照价格最高值的升序排列,因此它应该显示为:

BB: 1231
Kestrel Moon: 1165

正常排序不会这样做,因为它会对价格进行排序,但公司名称保持不变,我如何对两个数组进行排序以便显示我想要显示的内容?

谢谢

【问题讨论】:

  • 请使用代码缩进。它使阅读更容易。
  • 使用数组字面量 [] 而不是新数组

标签: javascript arrays sorting


【解决方案1】:

通常,您会将名称与数字分组:

function sortNumber(a,b)
{
    return b[1] - a[1];  // comparing using 2nd element
}

var n = [["ccc", 10.23], ["www", 23.12], ["mmm", 0.56]];
document.write(n.sort(sortNumber));

输出:

www,23.12,ccc,10.23,mmm,0.56

如果你使用 jQuery,你可以根据结果创建一个表:

function sortNumber(a,b)
{
    return b[1] - a[1];  // comparing using 2nd element
}

var n = [["ccc", 10.23], ["www", 23.12], ["mmm", 0.56]];
sorted = n.sort(sortNumber);

$('body').append('<table id="thetable"></table>');
$('#thetable').css({borderCollapse: 'collapse'})
for (i = 0; i < sorted.length; i++) {
    $('#thetable').append('<tr><td>' + sorted[i][0] + '</td><td>' + sorted[i][1] + '</td></tr>')
}
$('td').css({ border: '1px solid #ccc', padding: '0.2em 1em' });

【讨论】:

    【解决方案2】:

    以下是使用您的代码作为基础(即 2 个数组)的可能性:

    // comparaison functor
    function sorter(a, b) {
        return a.name.localeCompare(b.name);
    }
    
    // build a sorted array of object like
    // [ { "name": "foo", price: 123 }, ... ]
    // sorted by company name (Locale aware order)
    function mysort(comp, prices) {
        var res = [];
    
        for (var i = 0; i < comp.length; i++) {
            res.push({"name": comp[i], "price": prices[i]});
        }
    
        return res.sort(sorter);
    }
    
    var company = ["Kestrel Moon:", "BB:"];
    var basicPri = [1165, 1231];
    var companyTotal = "";
    var arr = mysort(company, basicPri);
    
    for (var i in arr) {
        companyTotal += arr[i].name + " " + arr[i].price + "<br/>";
    }
    
    document.write(companyTotal);
    

    在 chrome 6.0.427.0 dev 上测试

    【讨论】:

      【解决方案3】:

      正常排序不会这样做,因为它会对价格进行排序,但公司名称会保持原样......

      在这种情况下,对象数组可能是您的数据更好的数据结构。考虑下面的例子:

      var dict = [
        {company: 'Kestrel Moon:', basicPri: '1165'},
        {company: 'BB:', basicPri: '1231'}
      ];
      
      var sorted = dict.sort(function(a, b) {
        return a.company.localeCompare(b.company);
      });
      
      console.log(sorted[0].company + ' ' + sorted[0].basicPri);
      console.log(sorted[1].company + ' ' + sorted[1].basicPri);
      
      // Prints:
      // ------------------
      // BB: 1231
      // Kestrel Moon: 1165
      

      【讨论】:

        猜你喜欢
        • 2011-05-01
        • 2011-07-09
        • 1970-01-01
        • 1970-01-01
        • 2018-04-01
        • 1970-01-01
        • 2016-02-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多