【发布时间】:2017-09-27 04:29:55
【问题描述】:
我正在研究扁平化数组的问题。我遇到了一些非常奇怪的事情,似乎无法在网上找到答案。
为什么
[] + [1,2] = '1,2'
我似乎无法理解为什么将空数组添加到填充数组会导致字符串包含填充数组的内容。
导致这种情况的幕后发生了什么?
我的代码示例:
arr = [1, [2], [3, 4]];
arr.reduce(flatten, []); // [1, 2, 3, 4]
function flatten(a, b) {
return a.concat(b);
}
据我了解,reduce 会将“[]”设置为“初始值”,因此对于原始数组中的每个元素,它会将其与一个空数组连接起来,从而“展平”数组。
【问题讨论】:
-
JavaScript 不是 Python,+ 运算符不连接列表。数组被强制转换为字符串。试试
[1,2].toString();。 -
+既是算术加法又是 string 连接运算符。因此数组会自动转换为字符串以匹配运算符的参数类型。查看Array.prototype.concat 了解数组连接。
标签: javascript arrays concatenation