【问题标题】:Sorting arrays numerically by object property value按对象键值对javascript中的数组进行排序
【发布时间】:2021-10-30 08:04:14
【问题描述】:

你会如何用这些对象按距离对这个数组进行排序。这样您就可以从最小距离到最大距离对对象进行排序?

Object { distance=3388, duration="6 mins", from="Lenchen Ave, Centurion 0046, South Africa", more...}

Object { distance=13564, duration="12 mins", from="Lenchen Ave, Centurion 0046, South Africa", more...}

Object { distance=4046, duration="6 mins", from="Lenchen Ave, Centurion 0046, South Africa", more...}

Object { distance=11970, duration="17 mins", from="Lenchen Ave, Centurion 0046, South Africa", more...}

【问题讨论】:

标签: javascript arrays sorting object


【解决方案1】:

使用Array.prototype.sort(),例如

myArray.sort((a, b) => a.distance - b.distance)

sort() 方法接受 比较器 函数。这个函数接受两个参数(都可能是相同的类型),它的工作是确定两个参数中的哪一个先出现。

它通过返回一个整数

来做到这一点
  • 负数(小于零):第一个参数在前
  • 正数(大于零):第二个参数在前
  • 零:参数在排序时被视为相等

当您处理数值时,最简单的解决方案是从第一个值中减去第二个值,这将产生升序结果。

【讨论】:

    【解决方案2】:

    这是一个已接受答案的示例:

     a = [{name:"alex"},{name:"clex"},{name:"blex"}];
    

    升序:

    a.sort((a,b)=> (a.name > b.name ? 1 : -1))
    

    输出:[{name: "alex"}, {name: "blex"},{name: "clex"} ]

    降序:

    a.sort((a,b)=> (a.name < b.name ? 1 : -1))
    

    输出:[{name: "clex"}, {name: "blex"}, {name: "alex"}]

    【讨论】:

      【解决方案3】:

      这与当前的最佳答案相同,但在 ES6 单行中:

      myArray.sort((a, b) =&gt; a.distance - b.distance);

      【讨论】:

        【解决方案4】:

        这对我有用

        var files=data.Contents;
                  files = files.sort(function(a,b){
                return a.LastModified - b. LastModified;
              });
        

        或者使用 Lodash 对数组进行排序

        files = _.orderBy(files,'LastModified','asc');
        

        【讨论】:

          【解决方案5】:

          与已经给出的答案没有什么不同,但更通用的是:

          sortArrayOfObjects = (arr, key) => {
              return arr.sort((a, b) => {
                  return a[key] - b[key];
              });
          };
          
          sortArrayOfObjects(yourArray, "distance");
          

          【讨论】:

          • 可以写成单行退货声明:sortArrayOfObjects = (arr, key) =&gt; { return arr.sort((a, b) =&gt; a[key] - b[key]); };
          【解决方案6】:

          将所有对象推送到数组 myArray 中,然后使用 this 应用排序。

          myArray.sort(function(a, b) {
              return a.distance - b.distance;
          });
          

          【讨论】:

            【解决方案7】:

            如果您有小写和大写名称,请使用toLowerCase() 函数。
            这是一个例子:

            data = [{name:"foo"},{name:"Bar"},{name:"Foo"}];
            
            
            a.sort((a,b)=> (a.name.toLowerCase() > b.name.toLowerCase() ? 1 : -1))
            

            【讨论】:

              【解决方案8】:

              这里又为你准备了一条线:

              your_array.sort((a, b) => a.distance === b.distance ? 0 : a.distance > b.distance || -1);
              

              【讨论】:

                【解决方案9】:

                ES6 箭头函数:

                const orderArrayBy = (arr, key) => arr.sort((a, b) => a[key] - b[key]);
                

                【讨论】:

                  最近更新 更多