我是 JS 新手,我的任务是展平数组。我拥有的是 [1,2,[3,4]]
,我必须将其转换为 [1,2,3,4]
。我使用以下方法
function flatten(arr){
return arr.reduce(function(a, b) {
return a.concat(b);
});
}
但它说 concat
不是一个函数。
Array.isArray(arr); //returns true
有人可以告诉我在这里做什么:)
最佳答案
您的arr
值为[1,2,[3,4]]
。这是一个包含三个条目的数组:数字 1
、数字 2
和数组 [3,4]
。
reduce
回调的前两个参数是
- 累加器(这是上次调用回调的返回值)和
- 从数组中按顺序获取的值。
您没有在代码中提供初始累加器,因此这意味着对 reduce
回调的第一次调用接受前两个条目作为参数(即数组的第一个元素用作累加器)。 concat
不是一个函数,因为 a
的初始值是一个数字,而不是一个数组。您测试了 arr
是否是一个数组,但没有测试 a
是否是一个数组。
这里明确的解决方案是提供一个初始值用作累加器:
function flatten(arr){
return arr.reduce(function(a, b) {
return a.concat(b);
}, []);
}
这会创建一个空数组(使用 []
),然后将其作为第一次调用 reduce
回调的 a
值提供.
关于javascript - JS 中的数组 - 表示它是对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41363631/