2

再一次,在我这边似乎是一个大脑放屁。尝试通过遍历数组中的所有对象并更改这些对象的可观察属性来进行示例操作:

var sss = vm.tripData();
                for (var sh2 in sss) {
                    sh2.isVisible(false);
                }

sss包含对象数组,我可以在 VS2012 本地看到它 - 这就是我需要的。我宣布sss只是为了看看我要列举的内容。内部循环首先sh2包含字符串"0"为什么?我想这是一些 javascript 的东西(我来自 c# 背景)。我希望 sh2 成为我的对象。

编辑:

这是我在调试器中看到的:

sss 对象

sh2 字符串

4

1 回答 1

2

所以,问题在于 for...in 循环遍历对象属性的键,而不是对象的值。

所以如果你有一个像

var x = {
    a: "A",
    b: "B"
}

for...in会吐出来'a''b'。由于数组是对象,for...in使用数组会给你一些非常相似的东西:数组中每个索引的字符串。因此,与var a= [1, 2, 3], for...inofa将导致'0', '1', '2', 而不是1, 2, 3

改用下面的构造来做你想做的事。

var sss = vm.tripData();
for (var i = 0; i < sss.length; i++) {
    var sh2 = sss[i];
    sh2.isVisible(false);
}
于 2013-04-23T19:16:08.717 回答