JavaScript:按每个对象中的数值属性对对象数组进行排序

时间:2019-02-11 02:13:02

标签: javascript arrays sorting

我很难理解如何使用array.sort()方法基于在每个对象中找到的数值对对象数组进行排序。本质上,我具有以下形式的场景:

var myarray = []
myarray.push({name: "alex", age: 8})
myarray.push({name: "ben", age: 57})
myarray.push({name: "dan", age: 32})

结果的初始顺序为“ alex,ben,dan”。现在,我想按年龄对这个数组进行排序,因此年龄最大的人在列表上排名第一。排序后的顺序应为“ ben,dan,alex”。如何以最简单的方式实现这一目标?

4 个答案:

答案 0 :(得分:4)

您可以像这样使用destructuring assignment.sort方法:

var myarray = []
myarray.push({name: "alex", age: 8})
myarray.push({name: "ben", age: 57})
myarray.push({name: "dan", age: 32});

var res = myarray.sort(({age:a}, {age:b}) => b-a);
console.log(res);

或者,如果您对破坏不满意,则可以使用常规的dot notation来访问age属性:

var myarray = []
myarray.push({name: "alex", age: 8})
myarray.push({name: "ben", age: 57})
myarray.push({name: "dan", age: 32});

var res = myarray.sort((a, b) => b.age-a.age);
console.log(res);

.sort的工作方式由传入的回调函数返回的值定义。如果返回:

  • <= -1,然后a将在b之前。
  • 0,然后将ab放在相同的位置
  • >= 1,然后b将在a之前

因此,通过计算两个年龄之间的差异,此“自然”可以提供正确的值来对数组进行正确排序。

答案 1 :(得分:3)

myarray.sort((a,b) => b.age - a.age)

是正确的答案,但没人能解决OP难以理解排序的问题。传递给您的函数是比较函数,当比较数组中的两个元素时,应首先返回小于0的a,如果相等则返回0,大于b的0则首先返回。

我在项目中使用了默认的比较器功能

defaultCompare = (a, b) => (!a && !b ? 0 : !a ? -1 : !b ? 1 : a < b ? -1 : a > b ? 1 : 0);

未定义,null,NaN和其他错误值可能会在您身上抛出扳手。

答案 2 :(得分:2)

ES6

myarray.sort((a,b) => b.age - a.age)

ES5

myarray.sort(function(a,b){return b.age - a.age})

可以在此处找到有关排序功能的详细说明 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

*根据OP的要求按降序进行了编辑

答案 3 :(得分:0)

谢谢大家。我通过使用此选项解决了该问题:

<body>
<span class="Door">
    <select name="Amount" class="wpcf7-form-control  wpcf7-select">
        <option value="1.1">Traditional_doors</option>
        <option value="1.1">Duo_doors</option>
        <option value="1.3">cottage_doors</option>
        <option value="1.4">Modern_doors</option>
        <option value="1.4">Diamante_doors</option>
	<option value="1.5">Handmade_shaker_doors</option>
	<option value="1.6">Beaded_classic_or_victorian_doors</option>
    </select>
</spa>