【问题标题】:How to access nested object with numeric key? [duplicate]如何使用数字键访问嵌套对象? [复制]
【发布时间】:2019-12-14 22:26:03
【问题描述】:

我正在开发一个由带有数字键的嵌套对象组成的 API。这是数据:

{ "data": {"0":{"name":"kp"},"1":{"name":"josan"}}

我想知道一个键怎么可能是数字的。据我所知,这应该是不可能的。

axios.get(``)
.then( res => {const persons = res.data;
    this.setState({persons});

 render(){return ({this.state.persons.data."1".name})

我想访问name 中的1

【问题讨论】:

    标签: javascript arrays reactjs object axios


    【解决方案1】:

    像这样使用括号表示法:

    this.state.persons.data["1"].name
    

    您通常不能使用数字,因为所有 JavaScript 对象键都是字符串 - 如果您尝试使用点表示法中的数字,则会出现语法错误:

    const obj = { 1: "foo" };
    
    console.log(obj..1);

    但是,由于隐式转换的怪癖,括号中的数字可以正常工作:

    const obj = { 1: "foo" };
    
    console.log(obj[1]);

    【讨论】:

    • 得到同样的错误 TypeError: Cannot read property '1' of undefined
    • 呃……在哪里?我发布的解决方案有效 - 确保您正确复制它。
    • 这意味着this.state.persons.data 是未定义的。确保它已定义,否则代码将无法正常工作。
    • 杰克,我们在获得响应时使用了一个默认的“数据”术语,即 res.data,我有一个同名的键以及“数据”。所以基本上是什么在试图访问是 this.state.res.data.data["1"].name PS:我已经将 res.data 分配给人员。
    • 我的意思是反应能够区分两个“数据”。我很难理解这一点。
    【解决方案2】:

    您可以使用[](括号)表示法

    var a={ "data": {"0":{"name":"kp"},"1":{"name":"josan"}}}
    console.log(a.data[0].name)
    console.log(a.data[1].name)

    【讨论】:

    • TypeError:无法读取未定义的属性“0”类型错误:无法读取未定义的属性“1”
    • 它在 sn-p 中正常工作
    【解决方案3】:

    如果 { "data": {"0":{"name":"kp"},"1":{"name":"josan"}} 是来自 API 的响应,并且您已经这样做了:const persons = res.data;

    然后要获取您需要使用的名称this.state.persons['1'].name

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-06
      • 1970-01-01
      • 1970-01-01
      • 2019-12-01
      • 1970-01-01
      • 2011-10-18
      • 1970-01-01
      • 2022-01-08
      相关资源
      最近更新 更多