Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 试图理解.sort在这个问题的背景下是如何工作的_Javascript_Arrays - Fatal编程技术网

Javascript 试图理解.sort在这个问题的背景下是如何工作的

Javascript 试图理解.sort在这个问题的背景下是如何工作的,javascript,arrays,Javascript,Arrays,所以我有一个数组,里面有一堆关于汽车的信息,我应该按照汽车型号进行排序 var inventory = [ { id: 1, car_make: "Lincoln", car_model: "Navigator", car_year: 2009 }, { id: 2, car_make: "Mazda", car_model: "Miata MX-5", car_year: 2001 }, { id: 3, car_make: "Land Rover", car_model: "De

所以我有一个数组,里面有一堆关于汽车的信息,我应该按照汽车型号进行排序

var inventory = [
  { id: 1, car_make: "Lincoln", car_model: "Navigator", car_year: 2009 },
  { id: 2, car_make: "Mazda", car_model: "Miata MX-5", car_year: 2001 },
  { id: 3, car_make: "Land Rover", car_model: "Defender Ice Edition", car_year: 2010 },
  { id: 4, car_make: "Honda", car_model: "Accord", car_year: 1983 }
这就是决心解决它的解决方案

function sortCarInventory(inventory) {
return inventory.sort((a,b) => (a.car_model > b.car_model ? 1 : -1));
}
我得到它调用数组并通过它进行解析以对它们进行排序,它使用的参数是“a,b”

我不知道这些参数从哪里开始传递。此外,当它说“a.car_model”时,这是点符号吗?最后,为什么使用赋值为1或-1的条件运算符可以在这里进行排序


编辑我阅读了MDN文档,但仍然不理解为什么这样做有效,因此提出了这个问题

需要了解的最重要的事情是,您正在将函数作为参数传递。 您也可以这样写,以显示实际传递给.sort的内容(我还以更具描述性的版本编写了它,以便即使对于初学者也能看到那里发生了什么)

这意味着.sort需要一个参数,该参数是function。您不是执行此函数的人,是.sort方法执行的。因此,是.sort方法填充参数
a、b

要正常工作,您提供的函数需要处理两个参数,如果第一个参数较大,则需要返回
1
,如果第二个参数较大,则需要返回
-1
。(如果相等,还应返回0,这在作为解析器提供的代码中是可以改进的)

调用此函数的.sort对您来说是黑盒


注意:javascript语言允许对字符串使用
,它根据字典值返回true/false。

排序的详细信息可以通过简单的搜索引擎搜索找到<代码>排序()必须对元素进行相互比较,以确定哪个元素比另一个元素“大”。给它的两个参数是它必须比较的每个元素。你给它一个回调来定义如何比较它们。我想如果你所有的问题都会得到回答;由于此逻辑正在进行字符串比较,因此它应该看起来像
(a,b)=>a.car\u model.localeCompare(b.car\u model))
这是否回答了您的问题?“要正常工作,您提供的函数需要处理两个参数,如果第一个参数较大,则需要返回1;如果第二个参数较大,则需要返回-1。”如果两个参数相等,则还需要返回
0
。如果不这样做,在某些情况下可能会得到不一致的结果。案例将取决于环境和正在排序的数组。
inventory.sort(compareStrings);
function compareStrings(a, b) {
   if (a.car_model > b.car_model) {
     return 1;
   } else {
     return -1;
   }
}