通过数组循环而不使用属性

时间:2015-08-07 10:50:13

标签: javascript

我有一个类似这样的数据

z_score = 0
probability should be 0.5

z_score = 1.76
probability should be 0.039204

当我尝试使用Javascript迭代它时,返回的值是另一个对象。

我正在尝试做这样的事情

var data =  [{"empid":1},{"empid":2},{"empid":3},{"empid":4},{"empid":5},{"empid":6},{"empid":7},{"empid":8},{"empid":9}]

我希望在日志中看到我的empid值作为'value'的一部分,但'value'是另一个对象数组。

小提琴:http://jsfiddle.net/sourabhtewari/b6b3qxo7/

注意:我无法使用属性名来获取值,因为数据是动态的。所以我不能做for (var key in data) { console.log(' name=' + key + ' value=' + data[key]); }

之类的事情

5 个答案:

答案 0 :(得分:1)

只需打电话给它的财产。

data[key].empid

请参阅here一个工作示例。

答案 1 :(得分:1)

您需要遍历数组,而不是使用for..in进行迭代,而是使用常规for循环,在其中您可以使用for..in,因为每个数组项都是一个对象:

for (var i=0; i<data.length; i++) {
    for (var key in data[i]) {
        console.log(' name=' + key + ' value=' + data[i][key]);
    }
}

答案 2 :(得分:0)

你永远不应该使用for in来代替对象属性的数组。

使用

for (var i = 0; i < data.length; i++) {
   // ..
}

代替。您可以在循环中访问值data[i].empid

答案 3 :(得分:0)

这是因为您将对象转换为字符串,如果您只是调用empid属性,您将看到该值:

for (var key in data) {
    console.log(' name=' + key + ' value=' + data[key].empid);
}

您也可以使用其他函数来迭代数组,使用map可以检索属性并将它们存储在另一个数组中:

values = data.map( function(element) {
    return element.empid;
}
// values will be an array with all the empid properties

Array.forEach()

data.forEach(function (element) {
     console.log(element.empid);
}

答案 4 :(得分:0)

因为它是一个数组而且是数字,所以你可以看看你的代码:

var data =  [{"empid":1},{"empid":2},{"empid":3},...];
var data = {0: {"empid":1}, 1:{"empid":2}, {"empid":3}, ...}

当使用for ... in循环时,实际上是将数值赋给key,循环遍历所有键,但这不是你想要的。当您在该情况下询问值时,您将返回分配给该键的对象!有两种方法可以做到这一点。首先,通过修改代码:

for (var key in data) {
    console.log(' name=' + key + ' value=' + data[key].empid);
}

或者使用正确的方法使用常规for循环遍历数组:

for (var i = 0; o < data.length; i++) {
    console.log(' name=' + i + ' value=' + data[i].empid);
}