javascript - JS 中的数组 - 表示它是对象

标签 javascript arrays object

我是 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 回调的前两个参数是

  1. 累加器(这是上次调用回调的返回值)和
  2. 从数组中按顺序获取的

您没有在代码中提供初始累加器,因此这意味着对 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/

相关文章:

javascript - 在输入类型 = 文件中没有选择文件的情况下提交表单超时

c++ - cpp中如何判断json是object还是array,如果object转成array?

Java byte[] 到字符串转换输出字节

c++ - 对象的变量类型

javascript - 调用 valueOf 时的操作顺序

javascript - 我如何在屏幕上上下移动一段文本和图像,同时保持它们并排对齐?

javascript - 当最后没有项目时,Jquery Next previous buttons not stopp

javascript - 如何从较大的字符串中提取字符串?

java - 如何过滤 HashMap 并找到第一次出现

java - 是否在列表上运行 remove(int index) 方法以删除对象实例调用垃圾收集?