我想对下面的数组做一个深层次的复制。 result
应仅观察count
属性。
data = [{
id: 1,
code: 'ABC',
count: ko.observable(0)
},{
id: 2,
code: 'JKL',
count: ko.observable(5)
},{
id: 3,
code: 'QWE',
count: ko.observable(1)
}]
我尝试ko.mapping.fromJS(ko.mapping.toJS(data));
,但id
和code
也转换为可观察对象。
目前我正在使用以下代码来获得预期结果。
var obj = ko.mapping.toJS(data);
var result = [];
obj.forEach(function(o){
var obs = ko.mapping.fromJS(o, {
'observe': "count"
});
result.push(obs);
});
// result will give the expected result
这里我使用forEach
来循环data
数组中的每个对象。有没有办法避免forEach循环?或者如何仅观察对象数组中的count属性。
答案 0 :(得分:1)
您可以避开forEach
以及仅观察count
这样的内容:
var result = ko.mapping.fromJS(data, {observe: 'count'});
console.log(result());
修改:
根据文档,我们甚至不需要在数据中提及ko.observable
。它应该根据我们的'observe'参数选择它。所以也许您可能想要像这样修改data
:
var data = [{
id: 1,
code: 'ABC',
count: 0
}, {
id: 2,
code: 'JKL',
count: 5
}, {
id: 3,
code: 'QWE',
count: 1
}];
然后,使用forEach
,
var result = [];
data.forEach(function(o){
result.push(ko.mapping.fromJS(o, {observe:'count'}));
});
console.log(result);
取决于您,您希望使用哪种方法。