javascript对象可用于循环但在循环内部未完成

时间:2018-06-05 15:36:03

标签: javascript arrays json ajax

我在这里有个问题。 在从ajax

解析JSON对象后,我得到了一个对象(usrobj)
console.log(usrobj.available[0]);

其中usrobj.available是一个数组

(2) [{…}, {…}]
0:{currency: "ETH", amount: "0.5"}
1:{currency: "BTC", amount: null}
length:2
__proto__:Array(0)

这会产生像这样的vardump

{currency: "ETH", amount: "0.5"}
amount:"0.5"
currency:"ETH"
__proto__:Object

然而,当我尝试循环

for(i = 0; i < usrobj.available.length; ++i) {
    $('#assets-table').append('<tr>\
      <td>'+usrobj.available[i].currency+'</td>\
      <td>Available: '+usrobj.available[i].amount+' (Frozen: '+usrobj.frozen[i].amount+')<br /></td>\
...removed for brevity...

未捕获的TypeError:无法读取属性&#39; 0&#39;未定义的

at Object.success (readAssets.js:22)
at i (jquery-3.2.1.min.js:2)
at Object.fireWith [as resolveWith] (jquery-3.2.1.min.js:2)
at A (jquery-3.2.1.min.js:4)
at XMLHttpRequest.<anonymous> (jquery-3.2.1.min.js:4)

有人可以告诉我他们是否在不同的范围内?以及如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

你的物品没有&#34;冻结&#34;财产

&#34; usrobj.frozen [I] .amount&#34;所以它崩溃了

如果usrobj.frozen在同一位置的值与usrobj.avaiable相同,则需要以下内容:

let usrobj = {
  available: [
    {currency: "ETH", amount: "0.5"},
    {currency: "BTC", amount: null},
  ],
  frozen: [
    null,
    {ammount: '10'}
  ]
}

  for(let i in usrobj.available){
    console.log(
      `Avaiable ${usrobj.available[i].amount}
      Frozen ${(usrobj.frozen && usrobj.frozen[0] && usrobj.frozen[0].amount) || 0}
      `)
  }

答案 1 :(得分:0)

当你在jquery append函数中运行代码 usrobj.available [i] .currency 时,尝试将 this 引用保存到jquery函数之外的变量中使用 ref.usrobj.available [i] .currency

访问追加函数中的 usrobj.available [i] .currency

for(i = 0; i < usrobj.available.length; ++i) {
    let ref = this;
    $('#assets-table').append('<tr>\
      <td>'+ref.usrobj.available[i].currency+'</td>')
 ....     
}      
它只是一个小片段,试试吧