【发布时间】:2014-10-18 03:05:24
【问题描述】:
这个例子来自http://eloquentjavascript.net/code/#5.1。 我的问题是第一个重点细节;其他可能是有用的细节,但也是额外的;另请参阅第一个短程序以了解我的问题。
- 为什么使用arrays.reduce() 而不是reduce(arrays())。我知道他们与arrays.reduce 一起工作,但为什么呢?
这是对有用评论的回答,但对原始问题的补充。
- 我的问题是关于第一个程序。由于它使用arrays.reduce, reduce 将是一种数组方法,我不确定为什么 reduce 是一种 数组的方法。原因可能在于设计决策 JavaScript?谢谢@cookie 怪物的评论!
这是与我的问题有关的程序-
var arrays = [[1, 2, 3], [4, 5], [6]];
console.log(arrays.reduce(function(flat, current) {
return flat.concat(current);
}, []));
// → [1, 2, 3, 4, 5, 6]
以下这些细节是额外的,但可能(或可能不会)有用:
我知道使用了末尾的[],因为它是函数reduce 中的开始参数,以便将其他数组添加到该空数组中。我知道.concat 将+ 之类的两个数组与字符串放在一起,但用于数组。下面是 reduce 函数的样子,尽管它是标准的,但它的样子:
function reduce(array, combine, start){
var current = start;
for(var i = 0; i < array.length; i++)
current = combine(current, array[i]);
return current;
}
如果有帮助的话,他们的其他示例之一展示了我使用单个数组的方式。它看起来像:
console.log(reduce([1, 2, 3, 4], function(a, b){
return a + b;
}, 0));
// 10
谢谢! :)
【问题讨论】:
-
因为它是所有阵列的标准方法?我不完全确定你在问什么。
-
array.reduce()已经存在。没有必要将其重新定义为全球性的。 -
你想知道数组是如何找到它的方法的吗?还是您在询问 JavaScript 语言的设计决策?
-
我认为
combine应该使用第三个参数array来调用array.reduce()btw。 -
@JavaScriptArray -
.reduce()专门用于对数组进行操作。没有数组是没有用的。因此,在经典的面向对象设计中,将其作为数组对象的方法是有意义的。在面向对象的设计中,您将方法放在它们所操作的对象上,而不是制作一个巨大的全局函数列表,这些函数必须传递它们所处理的数据类型。以面向对象的方式组织功能有很多好处,而 Javascript 选择利用这些好处。
标签: javascript arrays flatten