【问题标题】:Accessing objects inside an object for a list访问对象内的对象以获取列表
【发布时间】:2021-08-29 21:33:00
【问题描述】:

所以我有这个对象,其中嵌套了其他对象和数组。我想创建一个函数,列出该对象及其嵌套对象中的所有元素。我确实创建了一个函数,但是当它列出对象中的项目时,它会在有嵌套对象或数组的部分显示 [object object]

这是我拥有的对象:

let weather = {
        base: "stations",
        clouds: {
          all: 1
        },
        coord: {
          lat: 43.65,
          lon: -79.38
        },
        dt: 1507510380,
        id: 6167863,
        main: {
          humidity: 77,
          pressure: 1014,
          temp: 17.99,
          temp_max: 20,
          temp_min: 16
        },
        name: 'Downtown Toronto',
        sys: {
          type: 1,
          id: 2117,
          message: 0.0041,
          country: 'CA',
          sunrise: 1507548290,
          sunset: 1507589027,
          type: 1
        },
        visibility: 16093,
        weather: [
          {
            description: 'clear sky',
            icon: '01n',
            id: 800,
            main: "Clear"
          }
        ],
        wind: {
          deg: 170,
          speed: 1.5
        }
      
      }

我创建的函数:

function listWeather(object) {
        let itemsList = ''
        for (let key in object) {
          itemsList+= '<li>' + key + ' : ' + object[key] + '</li>'
        }
        return itemsList
      }

【问题讨论】:

  • 你目前没有做任何事情来处理嵌套;你打算写一个递归函数吗?
  • 是的,我想要一个递归函数。我不确定如何编写函数来处理嵌套元素和数组
  • 你已经有了它——你只需要决定你想如何处理嵌套和你希望输出有多漂亮(以及你将如何确定一个对象值是否是一个对象/大批)。非常粗略,没有想过......好吧,任何事情:jsfiddle.net/davelnewton/p9ezyd1v
  • 注意 IRL 您可能希望拆分每个对象关键数据的处理方式、以不同方式排序等等——虽然它表面上是一个简单的递归函数,但不太可能简单的方法是可行的。您更有可能需要以特定方式处理每个键,例如,跳过显示、格式化输出(如日出/日落时间)等等。

标签: javascript arrays function javascript-objects


【解决方案1】:
let weather = {
    base: "stations",
    clouds: {
      all: 1
    },
    coord: {
      lat: 43.65,
      lon: -79.38
    },
    dt: 1507510380,
    id: 6167863,
    main: {
      humidity: 77,
      pressure: 1014,
      temp: 17.99,
      temp_max: 20,
      temp_min: 16
    },
    name: 'Downtown Toronto',
    sys: {
      type: 1,
      id: 2117,
      message: 0.0041,
      country: 'CA',
      sunrise: 1507548290,
      sunset: 1507589027,
      type: 1
    },
    visibility: 16093,
    weather: [
      {
        description: 'clear sky',
        icon: '01n',
        id: 800,
        main: "Clear"
      }
    ],
    wind: {
      deg: 170,
      speed: 1.5
    }
  
  }

function listWeather(object) {
    let itemsList = ''
    let itemsSubList = ''
    for (let key in object) {
      var item = object[key]
      if( isObject(item) ){
        for (let k in item) {
        document.write('<li>---' + k + ' : ' + item[k] + '</li>');
        }
      }else{
        if( Array.isArray(item) ){
          document.write('<li>----'+ key +':</li>');
          for (let l in item[0]) {
            document.write('<li>------' + l + ' : ' + item[0][l] + '</li>');
          }
        }else{
          document.write('<li>' + key + ' : ' + object[key] + '</li>');
        }
      }
    }
    // return itemsList
 }

function isObject(objValue) {
  return objValue && typeof objValue === 'object' && objValue.constructor === Object;
}

listWeather(weather)

【讨论】:

  • 这是您想要实现的目标,根据您给定的对象“天气”,我们必须使用函数来识别嵌套对象和数组中的值。
猜你喜欢
  • 2011-11-02
  • 1970-01-01
  • 2020-03-31
  • 2013-01-29
  • 1970-01-01
  • 1970-01-01
  • 2020-07-08
  • 1970-01-01
  • 2011-01-13
相关资源
最近更新 更多