一尘不染

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

algorithm

我经常研究一些JavaScript面试问题,突然间我看到一个关于reduce对an进行排序的功能的问题Array,我在MDN中阅读了该问题,并在一些medium文章中了解了它的用法,但是对an
Array进行排序是如此创新:

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

我想了很多,但是我不知道该如何回答这个问题,reduce call back函数必须是什么?是什么initialValuereduce功能?什么是accumulatorcurrentValuecall back的作用reduce

最后,与其他排序算法相比,这种方法是否具有某些优势?或改进其他算法有用吗?


阅读 2041

收藏
2020-07-28

共1个答案

一尘不染

在此处使用reduce毫无意义,但是您可以使用新数组作为累加器并对所有元素进行插入排序:

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

这是 没有 reduce 的版本:

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

现在写一些减速器的一般技巧:

reduce回调函数必须如何?

您要么采用累加器的方法,然后减速器应基于当前元素对累加器进行修改并返回:

(acc, el) => acc

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

 (a, b) => a + b

reduce函数的initialValue是多少?

您应该问自己 “将空数组应用于返回值时应如何减少收益?”

现在最重要的是:何时减少使用?(IMO)

如果要将数组的值简化为 一个值或对象

2020-07-28