我很难理解如何使用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”。如何以最简单的方式实现这一目标?
答案 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
,然后将a
和b
放在相同的位置>= 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>