循环遍历一个对象数组,并仅将值添加到另一个数组。昏死

时间:2012-04-06 12:56:57

标签: arrays knockout.js

朋友。我有以下问题。我有两个可观察的数组。

self.NamesArray= ko.observableArray([{"name: John"}, {"name: Mario"}]);

 self.ValueArray = ko.observable([]);

我想遍历NamesArray并仅将名称值添加到ValueArray。

因此输出ValueArray最后应包含以下元素:

{John, Mario}

这怎么可能发生?我是JS的新手,我只是在研究Knockout库。任何有关工作示例的帮助将不胜感激。感谢。

小提琴:http://jsfiddle.net/PsyComa/RfWVP/

1 个答案:

答案 0 :(得分:1)

这实际上取决于你背后的意图。

如果您只想做一次,只需遍历第一个数组:

// Load current values of the observables
var n = self.NamesArray(), v = self.ValueArray();

// Push all names from n to v
for (var i = 0; i < n.length; i++) {
    v.push( n[i].name );
}

// Update the "values" observable
self.ValueArray(v);

这样做的缺点是,只要“NamesArray”发生变化,“ValueArray”就不会更新。如果您希望“ValueArray”是一个包含可在“NamesArray”中找到的所有名称的数组(并且只有那些!),您可以使用计算的observable:

self.ValueArray = ko.computed(function() {
    var n = self.NamesArray(), v = [];
    // ...same for loop as above...
    return v;
});