过滤对象并将属性值赋给数组?

时间:2013-03-06 11:46:48

标签: jquery knockout.js

我有一个ko对象,它有一些属性。我只需要ItemName属性的值。

是否可以过滤此对象并获取ItemName属性值并将其推入数组。

items":[{"ItemID":1,"ItemName":"Asia","ItemLevel":0,"ItemParentID":0},
        {"ItemID":2,"ItemName":"Europe","ItemLevel":1,"ItemParentID":0},
        {"ItemID":3,"ItemName":"Africa","ItemLevel":2,"ItemParentID":0}]

以便我们最终得到以下结论:

array[0] = "Asia"
array[1] = "Europe"
array[2] = "Africa"

ko.utils.arrayFilter(items(), function(item) {
            return item.ItemName();
        });

3 个答案:

答案 0 :(得分:2)

使用arrayMap

items":[{"ItemID":1,"ItemName":"Asia","ItemLevel":0,"ItemParentID":0},
        {"ItemID":2,"ItemName":"Europe","ItemLevel":1,"ItemParentID":0},
        {"ItemID":3,"ItemName":"Africa","ItemLevel":2,"ItemParentID":0}]

var array = ko.utils.arrayMap(items, function(item) {
    return item.ItemName;
});

答案 1 :(得分:1)

您可以将mapping plugin与包含映射一起使用,只复制您想要的字段:

var mapping = {
    'include': ["ItemName""]
}
var viewModel = ko.mapping.fromJS(items, mapping);

答案 2 :(得分:0)

你写了几乎正确的代码。只需将arrayFilter替换为arrayMap

即可
ko.utils.arrayMap(items(), function(item) {
            return item.ItemName();
        });