Javascript 对象数组的敲除映射,对于某些属性,使用“观察”

Javascript 对象数组的敲除映射,对于某些属性,使用“观察”,javascript,knockout.js,Javascript,Knockout.js,我想制作下面数组的深度副本。并且结果应该只观察count属性 data = [{ id: 1, code: 'ABC', count: ko.observable(0) },{ id: 2, code: 'JKL', count: ko.observable(5) },{ id: 3, code: 'QWE', count: ko.ob

我想制作下面数组的深度副本。并且结果应该只观察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.fromJSko.mapping.toJSdata;但是id和代码也被转换成了可观察的。 目前我正在使用下面的代码来获得预期的结果

 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循环数据数组中的每个对象。有没有办法避免forEach循环?或者如何只观察对象数组中的count属性。

您可以避免forEach,也可以这样观察only count:

var result = ko.mapping.fromJS(data, {observe: 'count'});
console.log(result());
编辑:

根据文档,我们甚至不需要在数据中提到ko.observable。它应该根据我们的“观察”参数简单地拾取该值。因此,您可能希望修改数据,如下所示:

var data = [{
                id: 1,
                code: 'ABC',
                count: 0
            }, {
                id: 2,
                code: 'JKL',
                count: 5
            }, {
                id: 3,
                code: 'QWE',
                count: 1
            }];
然后,使用forEach


这取决于您,您更喜欢使用哪种方法。

谢谢Ray。那么,如果我的数据没有答案中提到的可观测数据,那么只有第二种方法有效吗?
var result = [];
data.forEach(function(o){
    result.push(ko.mapping.fromJS(o, {observe:'count'}));
});
console.log(result);