如何获取嵌套对象中的所有名称?

若奥·莫雷拉(Joao Moreira)

我目前正在学习JavaScript,我的老师要求我做一个练习,该练习将返回包含该对象所有名称的数组:

{
  name: 'grandma',
  daughter: {
    name: 'mother',
    daughter: {
      name: 'daughter',
      daughter: {
        name: 'granddaughter'
      }
    }
  }
}

我的问题是,类似这样的一个,但解决方案并不为我工作,因为我的对象不包含任何阵列。我到目前为止的代码:

    function toArray(obj) {
  const result = [];
    for (const prop in obj) {
        const value = obj[prop];
        if (typeof value === 'object') {
            result.push(toArray(value));
        }
        else {
            result.push(value);
        }
    }
    return result;
}

function nameMatrioska(target) {

return toArray(target);

}

打印出以下内容: [ 'grandma', [ 'mother', [ 'daughter', [Array] ] ] ]

但是我的老师想要的是: ['grandma', 'mother', 'daughter', 'granddaughter']

码笔

妮娜·斯科茨(Nina Scholz)

显然,您将一个数组推到一个数组,其中所有嵌套子级都显示为一个数组。

要解决此问题,您可以迭代数组并将仅单个项目推入结果集中。

使用一些内置技术的另一种方法是使用数组,并返回没有嵌套数组的单个数组。

一些方法:

  • Array#concat,创建一个新数组。它也可以与较旧的Javascript版本一起使用。

    result = result.concat(toArray(value));
    
  • Array#push与数组并Function#apply用于将数组作为参数列表。它可以在原位运行,并且可以与JS的旧版本一起使用。

    Array.prototype.push.apply(result, toArray(value));
    [].push.apply(result, toArray(value));              // needs extra empty array
    
  • 扩展语法,...用于将数组扩展为参数。ES6

    result.push(...toArray(value));
    

    传播语法是功能强大的替代品,apply具有更大的用途。也请提供示例

最后是一个具有传播语法的示例。

 function toArray(obj) {
    const result = [];
    for (const prop in obj) {
        const value = obj[prop];
        if (value && typeof value === 'object') { // exclude null
            result.push(...toArray(value));
            //          ^^^                          spread the array
        }
        else {
            result.push(value);
        }
    }
    return result;
}

function nameMatrioska(target) {
    return toArray(target);
}

var object = { name: 'grandma', daughter: { name: 'mother', daughter: { name: 'daughter', daughter: { name: 'granddaughter' } } } };

console.log(nameMatrioska(object));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Javascript如何更新嵌套对象中的所有属性名称

如何使用反射和递归获取任何对象的所有名称和值

获取数据集 R 包中对象的所有名称的列表?

如何获取嵌套结构中的所有属性名称

如何在Java X路径中获取带有名称空间的嵌套xml的属性

如何使用Scene Kit在Swift中获取具有名称的所有子节点

如何获取sql表的所有名称?

如何获取 office.js 中的所有名称(不是值)?

Python正则表达式-如何获取一行中的所有名称?

如何在Python中获取类的类方法的所有名称

如何获取所有 div 标签的一个“div”标签中的“a”标签中的所有名称?

如何从dom文档中删除所有名称空间

如何将嵌套数组中的元素转换为具有名称和值属性的对象数组?

如何从具有嵌套对象数组的对象数组中获取所有值?

如何从带有嵌套对象数组的对象数组中获取所有特定值?

如何在Spacy中获取所有名词短语

如何从MySQL检索所有名称?

使用递归获取嵌套对象中的所有父对象

如何从嵌套对象中获取具有值的所有键

当嵌套对象具有名称空间时如何反序列化XML

在JavaScript中执行计算后,如何在嵌套数组中获取所有对象?

如何获取JS对象中特定嵌套属性的所有值

如何递归获取嵌套对象的所有键?

在对象列表中的所有名称之间添加逗号

打字稿从嵌套对象中获取属性的所有值

如何以选中其复选框的数组形式获取所有名称

如何使用Kubernetes API获取特定Kubernetes集群中所有名称空间的列表?

如何通过程序集获取项目中的所有名称空间?

将枚举中的所有名称作为String []获取