从嵌套对象中检索数据

时间:2019-10-14 23:50:20

标签: javascript

我只有这个对象示例:

{
id: 301
 payload: {
 1: {
  house_no: 1234,
  city: London
  },
 2: {
  house_no: 0000
  city: Paris
  }
 }
}

我只需要提取1和2的house_no and city。 我试图像这样遍历:*传递给循环的地址是上面的对象

let item = [];
for(let x in address){
      item.push(item[x]);
}

console.log('Address', item.city);

这给了我带有未定义元素的数组:

[
0: undefined
1: undefined
]

你们能否请我帮我检索每个1,2所需的数据:house_no and city

3 个答案:

答案 0 :(得分:2)

Object.values(address.payload).map(({ house_no, city }) => ({ house_no, city }));

此操作遍历address.payload中的每个值,并返回包含house_nocity的对象数组。

const address = {
  id: 301,
  payload: {
   1: {
    house_no: 1234,
    city: 'London'
    },
   2: {
    house_no: 0000,
    city: 'Paris'
    }
  }
};

const result = Object.values(address.payload).map(({ house_no, city }) => ({ house_no, city }));

console.log(result);

答案 1 :(得分:0)

您可以按如下所示直接访问它,

const {1: obj1, 2: obj2} = address.payload;

在这里,javascript将解构有效负载并将对象1分配为1,将对象2分配为2。在您提供的对象中,缺少一些逗号和引号。因此,我也在下面添加了该内容。现在,obj1和obj2将具有1和2个对象,您可以在其中轻松提取所需的数据。

let address = {
    id: 301,
     payload: {
     1: {
      house_no: 1234,
      city: "London"
      },
     2: {
      house_no: 0000,
      city: "Paris"
      }
     }
    };

const {1: obj1, 2: obj2} = address.payload;
console.log(obj1);
console.log(obj1.city);
console.log(obj1.house_no);

答案 2 :(得分:0)

您可以直接访问对象属性而无需循环:

<script>
  var obj = {
    id: 301,
    payload: {
    1: {
      house_no: 1234,
      city: "London"
      },
    2: {
      house_no: 0000,
      city: "Paris"
      }
    }
  }
  var address1 = obj.payload[1].house_no + " " + obj.payload[1].city;
  var address2 = obj.payload[2].house_no + " " + obj.payload[2].city;
</script>