如果对象具有不同数据类型的属性,则对对象阵列进行排序

时间:2017-12-01 06:43:59

标签: javascript

有人能简单解释一下吗?我对此部分感到困惑:cars.sort(function(a, b){return a.year - b.year});

这是我的代码。什么是a,b,为什么我们使用a.year,b.year

<button onclick="myFunction()">Sort</button>
<p id="demo"></p>
<script>
var cars = [
{type:"Volvo", year:2016},
{type:"Saab", year:2001},
{type:"BMW", year:2010}]

displayCars();

function myFunction() {
    cars.sort(function(a, b)

    {return a.year - b.year}
    );
    displayCars();
}

function displayCars() {
  document.getElementById("demo").innerHTML =
  cars[0].type + " " + cars[0].year + "<br>" +
  cars[1].type + " " + cars[1].year + "<br>" +
  cars[2].type + " " + cars[2].year;
}
</script>

4 个答案:

答案 0 :(得分:0)

function(a,b){return a.year-b.year}是比较函数的一部分,它返回负值和零值,用于排序。

从MDN检查此说明

MDN Link for sort Function

这是w3School Sort explanation

的链接

答案 1 :(得分:0)

您正在使用与数组相关的sort函数。

具体到你的问题, 汽车是一系列物体。 a和b是阵列车中的两个元素。

function myFunction() {
    cars.sort(function(a, b) // take in 2 elements from the array
    // a = {type:"Volvo", year:2016}
    // b = {type:"Saab", year:2001},

    {return a.year - b.year} // a-b is for ascending order
    // return 2016 - 2001
    );
    displayCars();
}

答案 2 :(得分:0)

sort函数接受比较函数作为参数。

对于集合中的元素对调用比较,并且需要根据您尝试实现的顺序返回更大。在这种情况下,这是一年。

如果要将第一个元素视为更大,则比较函数的结果需要为>= 0,否则为< 0

答案 3 :(得分:0)

array.prototype.sor 需要一个回调函数作为参数。当sort方法对数组进行排序时,它会多次调用回调并将数组中需要比较的两个对象传递给它。这两个对象在这里是a和b。 array.prototype.sort 方法要求回调返回正数,负数1或零,具体取决于a和b所需的顺序。在这里,排序回调按年比较两辆车,所以要返回负数/正数或零,最简单的方法是返回 a.year - b.year