【问题标题】:In JavaScript, how to access object properties inside an array of object?在 JavaScript 中,如何访问对象数组中的对象属性?
【发布时间】:2018-08-28 05:41:53
【问题描述】:

我有以下对象数组,我正在尝试访问测试器交易的金额和状态?

我可以通过以下方式显示公司和项目的名称:

transactions.map((transaction, index) => {
    console.log(transaction.company_name)
    console.log(transaction.project_name)
})

我将如何显示属于 tester_transaction 对象的状态和金额?

【问题讨论】:

    标签: javascript arrays object ecmascript-6


    【解决方案1】:
    transactions.map((transaction, index) => {
        if(transaction.hasOwnProperty("company_name")){
           console.log(transaction.company_name);
        }
        if(transaction.hasOwnProperty("company_name")){
           console.log(transaction.project_name);
        }
        if(transaction.hasOwnProperty("tester_transaction")){
           console.log(transaction.tester_transaction.amount);
        }
        if(transaction.hasOwnProperty("tester_transaction")){
           console.log(transaction.tester_transaction.status);
        }
    });
    

    不要忘记检查该属性是否存在。

    【讨论】:

    • 为什么是map?当您只需要访问它时!
    • RyuH 在他的原始代码中使用了地图。 map 的作用是根据传递给它的方法创建一个新数组。
    【解决方案2】:

    您可以直接从transaction 访问.tester_transaction 对象及其属性(并检查tester_transaction 是否已定义):

    transactions.map((transaction, index) => {
        console.log(transaction.company_name)
        console.log(transaction.project_name)
    
        if (transaction.tester_transaction !== undefined) {
          console.log(transaction.tester_transaction.status)
          console.log(transaction.tester_transaction.amount)
        }
    })
    

    【讨论】:

    • 我已经尝试过了,但是没有用。我得到Uncaught TypeError: Cannot read property 'status' of undefined
    • 那么这意味着不是所有的transaction 都有tester_transaction 属性。
    【解决方案3】:
        transactions.map((t) => {
        console.log(t. tester_transaction.amount)
      console.log(t.status)
    })
    

    【讨论】:

      【解决方案4】:

      这段代码违反了地图的使用。

      阅读有关地图的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map

      请使用简单的for of.. 循环,因为您的目的是获取值并打印它。

      for(const transaction of transactions) {
        console.log(transaction.company_name || '');
        console.log(transaction.project_name || '');
      
        if(!transaction. tester_transaction)
          continue;
      
        console.log(transaction.tester_transaction.amount || '');
        console.log(transaction.tester_transaction.status || '');
      } 
      

      【讨论】:

        猜你喜欢
        • 2013-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-15
        • 1970-01-01
        • 2020-10-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多