在javascript

时间:2018-01-29 10:05:00

标签: javascript

我在变量data中有一个javascript对象,如:

data: Object {
   aliquota: 23,
   imponibileLordo: 300,
   imponibileScontato: "",
   imposta: 69
}

在另一个函数中,我使用索引来迭代对象:

for ( var index = 0; index < data.length; index++ ) {
    var valueOfIndex = data[index];
    console.log(valueOfIndex);
}

但我收到错误原因数据[0],数据[1],数据[2],数据[3]未定义。

怎么能解决这个问题?重要提示:我使用数字INDEX作为循环因为我根据索引值进行其他操作。

更新:好的,我的目标是另一个。因此,我将使用修复程序上传脚本我不喜欢但是有效。 (请参阅//ACTUAL FIX评论)此处还有小提琴:https://jsfiddle.net/am3ovL3b/5/

var array_iva = [];

var data = { "impo": 10, "aliq": 20, "other": 30 };
var column = { "title": "TEST 1", "data": data };
array_iva.push(column);

var data = { "impo": 40, "aliq": 50, "other": 60 };
var column = { "title": "TEST 2", "data": data };
array_iva.push(column);

var json_righe = [[ "Imponibile lordo" ], [ "Aliquota %" ], [ "Others" ] ];

for ( var i = 0; i < array_iva.length; i++ ) {

var titolo_colonna_iva = {};

titolo_colonna_iva['title'] = array_iva[i]['title'];

for ( j = 0; j < json_righe.length; j++ ) { //  for each 

    var riga = json_righe[j];

    for ( var k = 0; k < array_iva.length; k++ ) {  //  EMPTY DEFAULT
        riga.push("");
    }

    //  ACTUAL FIX

    if ( j == 0 ) {
        riga[(i+1)] = array_iva[i]['data']['impo'];
    } else if ( j == 1 ) {
        riga[(i+1)] = array_iva[i]['data']['aliq'];
    } else if ( j == 2 ) {
        riga[(i+1)] = array_iva[i]['data']['other'];
    }

      //END ACTUAL FIX

    /*
    THIS DOESn?T WORK
    riga[(i+1)] = array_iva[i]['data'][j];
    */

    json_righe[j] = riga;

}

}

3 个答案:

答案 0 :(得分:2)

您可以使用Object.keys获取所有密钥的数组,并通过此数组循环到与每个密钥相对应的console.log值:

var data = {
   aliquota: 23,
   imponibileLordo: 300,
   imponibileScontato: "",
   imposta: 69
};

Object.keys(data).forEach(key => console.log(data[key]));

答案 1 :(得分:0)

要使用for ..in

迭代对象

&#13;
&#13;
var data = {
  aliquota: 23,
  imponibileLordo: 300,
  imponibileScontato: "",
  imposta: 69
}

for (var index in data) {
  var valueOfIndex = data[index];
  console.log(valueOfIndex);
}
&#13;
&#13;
&#13;

答案 2 :(得分:0)

  

我要使用数字INDEX作为循环,因为我根据索引值执行其他操作。

然后,您将需要重新组织您的逻辑和代码以使用数组而不是对象,或者至少以定义的顺序拥有您自己的属性名称数组并循环执行该操作。尽管对象属性具有ES2015的顺序,但它不是您应该使用的顺序,因为它取决于对象的创建方式以及属性的名称(例如,它们是否与数组索引相似)。

您可以通过在对象上使用Object.getOwnPropertyNames并循环返回数组中的字符串来循环遍历ES2015 +顺序中对象的属性,例如:

Object.getOwnPropertyNames(data).forEach((name, index) => {
    // `name` will be the property name,
    // `index` will be its index in the property order
    // ...
});

......但是,依靠那些按照特定顺序排列的东西并不是一个好主意。