【问题标题】:How to output keys in key value pairs in nested arrays JavaScript如何在嵌套数组中的键值对中输出键 JavaScript
【发布时间】:2019-04-10 15:34:03
【问题描述】:

在项目数组内,有一个名为“文件夹”的数组,在数组内有“信息”我怎样才能只打印信息数组中的键而不是值? 如打印出“创建”和“修改”?

let item = [
  {
    itemName: 'folder',
    info:
    {
      created:'August 13 2013',
      modified: 'December 06 2017'
    }
  },
  {
    itemName: 'new folder',
    info: 'ruby files'
  },
  {
    itemName: 'documents',
    info: ''  
  }
]

【问题讨论】:

  • 尝试像这样迭代for (let key in item[0].info)

标签: javascript arrays key key-value


【解决方案1】:

您可以通过循环数组来打印对象键,并使用Object.keys() 来打印键

【讨论】:

    【解决方案2】:

    使用forEach 检查每个项目,如果项目的info 属性是一个对象,则打印其键。

    item.forEach(data => {
      if(data.info.constructor === Object) {
        console.log(Object.keys(data.info));
      }
    })
    

    【讨论】:

      【解决方案3】:

      查看每个属性并使用递归函数更深入:

        let item = [
        {
          itemName: 'folder',
          info:
          {
            created:'August 13 2013',
            modified: 'December 06 2017'
          }
        },
        {
          itemName: 'new folder',
          info: 'ruby files'
        },
        {
          itemName: 'documents',
          info: ''  
        }
      ];
      
      var console=window.console;
      
      function displayObj(obj) {
          if (obj instanceof Array) {
              for (var i = 0; i < obj.length; i++) {
                  console.log('obj['+i+']='+obj[i]);
                  displayObj(obj[i]);
              }
      
          }
          if (obj instanceof Object) {
              for (var p in obj) {
                  console.log('obj.'+p+'='+obj[p]);
                  displayObj(obj[p]);
              }
          }
      }
      
      displayObj(item);
      

      【讨论】:

        【解决方案4】:

        嗯,它不是无限递归的,但它可以工作(我会尝试改进它)

        let items = [
            {
                itemName: 'folder',
                info:
                {
                    created:'August 13 2013',
                    modified: 'December 06 2017'
                }
            },
            {
                itemName: 'new folder',
                info: 'ruby files'
            },
            {
                itemName: 'documents',
                info: ''    
            }
        ];
        
        let Keys = [];
        
        items.forEach((el, index) => {
            Object.keys(el).forEach(key => {
                if(!Keys[index])
                    Keys[index] = [];
                if(typeof el[key] === 'object'){
                    Keys[index].push(Object.keys(el[key]));
                }
                else {
                    Keys[index].push(key);
                }
            })
        });
        

        JSFiddle

        【讨论】:

          猜你喜欢
          • 2021-10-28
          • 1970-01-01
          • 2022-01-12
          • 2014-03-21
          • 1970-01-01
          • 2021-09-01
          • 1970-01-01
          • 2017-11-19
          • 1970-01-01
          相关资源
          最近更新 更多