迭代嵌套的JavaScript对象

3

我无法访问这个对象:

{
  "BTC": {
    "price": 13322.848306438736,
    "percent_change_24h": 2.00659441,
    "market_cap": 246870460628.15366,
    "volume_24h": 33956399259.1725,
    "circulating_supply": 18529856,
    "total_supply": 18529856,
    "max_supply": 21000000
  },
  "ETH": {
    "price": 380.8150073343507,
    "percent_change_24h": -0.67132589,
    "market_cap": 43115533610.355606,
    "volume_24h": 15706287212.275429,
    "circulating_supply": 113219103.1865,
    "total_supply": 113219103.1865,
    "max_supply": null
  }
}

到目前为止,我已经尝试了Object.key()、map()、将其转换为数组、算法方法等多种方式。我可以通过以下方式获取外部对象的列表:

Object.keys(this.state.dataApi).map((value,key)=>(
                   value
                  ))

例如,我可以通过以下方式将“BTC”中的内容作为对象获取:

this.state.dataApi.BTC

但我无法逐个获取它的内部元素。

这是预期的输出示例:

https://istack.dev59.com/eK8Ic.webp

这是我的成功尝试的输出:

https://istack.dev59.com/AK6lR.webp

注意:这也尝试了将状态[],{},""更改类型,只有""可以在原始类型中保留对象。

3个回答

2
let obj= {
  "BTC": {
    "price": 13322.848306438736,
    "percent_change_24h": 2.00659441,
    "market_cap": 246870460628.15366,
    "volume_24h": 33956399259.1725,
    "circulating_supply": 18529856,
    "total_supply": 18529856,
    "max_supply": 21000000
  },
  "ETH": {
    "price": 380.8150073343507,
    "percent_change_24h": -0.67132589,
    "market_cap": 43115533610.355606,
    "volume_24h": 15706287212.275429,
    "circulating_supply": 113219103.1865,
    "total_supply": 113219103.1865,
    "max_supply": null
  }
};

console.log(obj["BTC"]);
console.log(obj["ETH"].price);

Object.keys(obj).map((value,key)=>{
   console.log(obj[value]);
   console.log(obj[value].price);
}
                  )

你是正确的。但是你需要使用['value']访问对象。

1
那确实是最合乎逻辑的路径,谢谢,它起作用了! - EagleMind

0

你试过用 for..in 循环吗?你可以用 for...in 循环对象。你可以在这里阅读 这里

const parent = {
  "BTC": {
    "price": 13322.848306438736,
    "percent_change_24h": 2.00659441,
    "market_cap": 246870460628.15366,
    "volume_24h": 33956399259.1725,
    "circulating_supply": 18529856,
    "total_supply": 18529856,
    "max_supply": 21000000
  },
  "ETH": {
    "price": 380.8150073343507,
    "percent_change_24h": -0.67132589,
    "market_cap": 43115533610.355606,
    "volume_24h": 15706287212.275429,
    "circulating_supply": 113219103.1865,
    "total_supply": 113219103.1865,
    "max_supply": null
  }
}

for (const key in parent) { // This is just O(n)
  // key - BTC,ETH
  console.log(parent[key].price)
  console.log(parent[key].percent_change_24h)
}


是的,这可以映射它们所有,但您不能像这样逐个访问它们: getBTC= () =>{ for (const key in this.state.dataApi.BTC) { console.log("bitcoin",this.state.dataApi[key]["price"],this.state.dataApi[key]["percent_change_24h"],this.state.dataApi[key]["market_cap"]) }}当我使用for循环时,我得到了一个空的答案! - EagleMind
上述解决方案仅逐个迭代,您只需要将“parent”替换为“this.state.dataApi”。时间复杂度为O(n)。 - Naren

0
你使用了 Object.keys 是正确的。还有另一个方法叫做 Object.values,它可以为对象的每个键提供值。
如果我们的对象是 data,那么 Object.keys(data) 将会给我们一个包含两个值的数组。之后,我们可以使用 map() 进行迭代以获取所有价格:
Object.values(o).map(d => d.price)

let o = {
  "BTC": {
    "price": 13322.848306438736,
    "percent_change_24h": 2.00659441,
    "market_cap": 246870460628.15366,
    "volume_24h": 33956399259.1725,
    "circulating_supply": 18529856,
    "total_supply": 18529856,
    "max_supply": 21000000
  },
  "ETH": {
    "price": 380.8150073343507,
    "percent_change_24h": -0.67132589,
    "market_cap": 43115533610.355606,
    "volume_24h": 15706287212.275429,
    "circulating_supply": 113219103.1865,
    "total_supply": 113219103.1865,
    "max_supply": null
  }
}
console.log(Object.values(o))


是的,这也可以用于映射,但仅适用于选择一个元素,例如仅选择“BTC”,然后访问其详情: Object.values(this.state.dataApi)。map(d =>console.log(d.btc.price)) - EagleMind
在这种情况下,对所选元素使用Object.values():Object.values(this.state.dataApi.BTC),这将给您一个包含BTC每个属性的数组。 - Hugo Elhaj-Lahsen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接