【问题标题】:Sorting a Javascript Array and get number difference对 Javascript 数组进行排序并获得数字差异
【发布时间】:2015-06-29 19:50:26
【问题描述】:

我有 3 个不同价格的 Javascript 变量。我需要按从低到高的顺序对价格进行排序。价格最低的会输出“最低”,价格高的只会显示差价。

例如:

var apple = 2.99;
var watermelon = 12.99;
var orange = 4.99;

这应该会输出:

Apple: Lowest, Orange: $2 more, Watermelon: $10 More

为此,我创建了一个包含三个对象的数组。

var item = new Array();
item.push({apple:"2.99"});  
item.push({watermelon:"12.99"});    
item.push({orange:"4.99"});

现在我需要以某种方式对数组进行排序并获得价格差异。我将如何做到这一点?

【问题讨论】:

    标签: javascript jquery arrays sorting


    【解决方案1】:

    我不建议使用对象来关联名称和价格,因为要获得属性,您必须使用类似Object.keys(obj)[0] 的东西,这很难看。

    相反,我建议将数据存储在成对数组中,例如将名称存储在第一个位置,将价格存储在第二个位置。

    然后,根据价格对数组进行排序,使用map为每一对产生一个字符串,最后将字符串连接起来。

    [                                   // Data
      ['Apple', 2.99],
      ['Watermelon', 12.99],
      ['Orange', 4.99]
    ].sort(function(a,b) {              // Sort by price
      return a[1] - b[1];
    }).map(function(pair, index, arr) { // Stringify each pair
      var diff = pair[1] - arr[0][1];
      return pair[0] + ': ' + (diff ? '$' + diff + ' more' : 'Lowest');
    }).join(', ');                      // Join the strings
    

    【讨论】:

    • 哦,我真的错过了 JS 中的声明性 scan 方法……
    • @Bergi 什么是声明性scan
    • reducemap 之间的混合,参见例如the Haskell one。编辑:甚至还有一个Wikipedia article :-)
    • @Oriol 2 问题:不是将结果存储在字符串中,是否可以将差异存储回原始变量中?此外,这段代码超出了 Javascript 技能,我不太确定 console.log 是什么...感谢您的帮助!
    • @steeped 区别是diff。例如,如果您想要三元组 [名称、价格、差异],您可以使用 pair.push(diff)。您可以console.log 全部使用,也可以将其拆分为部分var data = [...]; data.sort(...); var strings = data.map(...); var string = strings.join() 并将console.log 放在语句之间。
    【解决方案2】:

    您将需要清理代码,但这是您可以实现您想要实现的目标的方法。

    JSFiddel:http://jsfiddle.net/2a48yLbg/2/

    代码:

    var apple = 2.99;
    var watermelon = 12.99;
    var orange = 4.99;
    
    var myArray = [{"name":"Oragne", "value":orange}, 
                   {"name":"Watermelon", "value":watermelon}, 
                   {"name":"Apple", "value":apple}];
    myArray.sort(function(a, b){
                    return a.value - b.value;
                });
    
    var lowestObject = myArray[0];
    var lowestValue = lowestObject.value;
    console.log(lowestValue);
    var printStatement = "";
    
    for(var i=0; i < myArray.length; i++)
    {
        var printObject = myArray[i];
        var partTwo = ""
        if(i === 0)
        { partTwo = "lowest, " } else { partTwo = printObject.value - lowestValue + " more, "};
    
        printStatement +=  printObject.name + " : " +  partTwo;
    
    }
    console.log(printStatement);
    document.getElementById ("content").innerHTML = printStatement;
    

    【讨论】:

      猜你喜欢
      • 2020-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-24
      • 1970-01-01
      • 2011-12-26
      • 2021-11-06
      相关资源
      最近更新 更多