javascript中的array.sort() - 在一次采访中被问到
#javascript #网络开发人员 #编程 #arrays

我正在接受采访,我得到了一系列的弦乐。

const arr = [
  "karachi",
  "lahore",
  "kolachi",
  "islamabad"
]

他要求我按字母顺序排序。

我尝试了:

arr.sort((a, b) => {
  return a < b;
});

他说它将适用于数字(实际上不会),但对字符串不起作用。

然后我尝试了

arr.sort((a, b) => {
  return a.charAt(0) < b.charAt(0);
});

他说它将仅适用于第一个字符(实际上它不会),那么karachikolachi如何从k开始?

我是空白的。

他说什么是ab

i说a是当前元素(当前迭代索引处的元素),而b是下一个元素(当前迭代+1索引处的元素)。

ð,但实际上是相反的。 a是下一个元素,b是当前元素。

然后他问,排序是否修改了原始数组或返回新数组。

老实说,大多数时候我正在与.map().filter().some().every()合作。所以我知道这些方法的行为,但我不记得我上一次使用.sort()是什么时候。

我说,它不会修改原始数组,而是返回像.map()一样的新数组。

ð,但情况相反。 .sort()修改了原始数组,并返回对原始数组的引用,该数组现在已排序。

.sort()实际上如何工作?

Array.sort()接受可选的比较函数作为参数。

如果我们不提供任何比较函数,则排序方法将所有non-undefined元素转换为字符串,然后比较其UTF-16代码单位值的序列。

什么是“比较他们的UTF-16代码单元序列”的含义是什么?
简而言之,假设我们编写了javaScript中编码为UTF-16的字符a。在十进制中,它的价值将为97。对于b,它将是98。即
Cold23 = Cold24
B = 66
C = 67
等等。
我希望您知道ACII表。

因此,基本上,字符串数组将通过.sort()方法自动排序,而无需传递任何比较函数。

ð在数字中,行为是相同的;

const arr = [1, 30, 4, 21, 100000];
arr.sort();
console.log(arr);
// expected output: [1, 100000, 21, 30, 4]

因为首先将每个数字转换为字符串,然后就其UTF-16代码单位值进行比较。

但是,如果我们提供了基于数字进行排序的比较函数:

const arr = [1, 5, 3, 10, 7]
arr.sort((nextValue, prevValue) => {
  // if returnValue > 0, move nextValue after the prevValue
  // if returnValue < 0, move the nextValue before the prevValue
  // if returnValue === 0, keep the original order, do not move any value
  return nextValue - prevValue;
});

因此,可以这样考虑的排序方法:

function compareFunction(a, b) {
  if (a is less than b by some ordering criterion) {
    return -1;
  }
  if (a is greater than b by the ordering criterion) {
    return 1;
  }
  a must be equal to b
  return 0;
}

我希望这会使有关Array.sort()的事情有些清楚

就是这篇文章。在下面的评论中写下您的想法!