【问题标题】:Trying to push the contents of objects nested inside objects to an array (JavaScript)尝试将嵌套在对象内部的对象的内容推送到数组 (JavaScript)
【发布时间】:2022-11-25 21:00:14
【问题描述】:

当对象嵌套在对象内部时,我无法使用常规的 for in 循环遍历它们。 我用谷歌搜索,发现我必须创建一个递归函数来检查该属性是否是一个对象。 我写了一个这样的递归函数: `

 function isObject(value){
        return (typeof(value)==='object');
      }

``

 function listToArray(list){
        let arr=[];
        for (let elem in list){
            if(isObject(list[elem])===false){
                console.log(list[elem]);
            }
            else if (isObject(list[elem])){
                listToArray(list[elem]);
            }
        }
        return arr;
       }

`

此功能运行良好,它深入循环嵌套在对象内的所有对象,并控制台记录所有属性值。并返回一个空数组。

但是,当我将 console.log(list[elem])) 替换为 arr.push(list[elem]) 以使实际功能正常工作时,它仅推送不是第一个更大对象中的对象的属性。

这是 Eloquent JavaScript 这本书中的一个编码问题。我不想回答这个问题(实际上这本书提供了答案)我只想知道为什么 console.log 有效而 arr.push 不有效。因为这对我来说太奇怪了,我找不到解释。

【问题讨论】:

  • 你能更清楚地描述你的问题吗?您是否希望将所有不是对象的元素分组并推入数组?

标签: javascript arrays object nested


【解决方案1】:

这是因为您没有在 elseif 块中捕获返回的数组

      function isObject(value){
        return (typeof(value)==='object');
      }
      
       function listToArray(list){
        let arr=[];  
        for (let elem in list){
            if(isObject(list[elem])===false){
                arr.push(list[elem]);
            }
            else if (isObject(list[elem])){
                retArr = listToArray(list[elem]);
                arr = [...arr, ...retArr];
            }
        }
        return arr;
       }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-04
    • 2021-11-06
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    相关资源
    最近更新 更多