javascript - 使用 JavaScript reduce 函数对数组进行排序

标签 javascript algorithm sorting reduce

经常研究一些JavaScript的面试题,突然看到一个关于reduce函数对Array排序的用法的题,我看了它在 MDN以及它在一些 medium 文章中的用法,但是对 Array 进行排序是如此创新:

const arr = [91,4,6,24,8,7,59,3,13,0,11,98,54,23,52,87,4];

我想了很多,但我不知道如何回答这个问题,reduce call back 函数必须如何? reduce 函数的 initialValue 是什么? reducecall back函数的accumulatorcurrentValue是什么?

最后,这种方式是否比其他排序算法有一些好处?或者对改进其他算法有用吗?

最佳答案

在这里使用 reduce 是没有意义的,但是您可以使用一个新数组作为累加器并对所有元素进行插入排序:

array.reduce((sorted, el) => {
  let index = 0;
  while(index < sorted.length && el < sorted[index]) index++;
  sorted.splice(index, 0, el);
  return sorted;
}, []);

这是没有 reduce 的版本:

array.sort((a, b) => a - b);

现在是编写 reducer 的一些一般技巧:

how must be the reduce call back function?

您要么采用累加器的方法,然后 reducer 应根据当前元素对累加器应用修改并将其返回:

(acc, el) => acc

或者如果累加器和元素具有相同的类型并且逻辑上相等,则不需要区分它们:

 (a, b) => a + b

what is the initialValue of reduce function?

您应该问问自己“当它应用于空数组时应该减少什么?”

Now the most important: When to use reduce? (IMO)

如果您想将数组的值归结为一个单一的值或对象

关于javascript - 使用 JavaScript reduce 函数对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50245957/

相关文章:

java - 如何按日期字段对集合进行排序?

python - 对列进行排序,使一列位于另一列的值之后

javascript - react webpack/browserify "unexpected token"

javascript - 每次文本长度大于 2 行时都会出现按钮 "Readmore"

algorithm - 找到从一个到另一个的所有可能方法的时间复杂度是多少?

c - C 中的指针二叉树迷宫求解器

javascript - 提交时刷新 div 中的单个数据库字段

javascript - 扩展 google chrome devtools 样式检查器

java - 检测圆形(非精确圆形)路径算法?

sql - 简单、快速的平面文件 SQL 查询