对象的Array_map?

时间:2017-02-03 13:13:32

标签: javascript

我想过滤包含对象的object,以便仅获取包含具有特定值的数组的对象。

这是对象:

Object
-Object[0]
--Title
--Date
--Specs [Array]
---- [0] Name: "Power"
---- [0] Value: 5
---- [1] Name: "Weight"
---- [1] Value: 100
-Object[1]
--Title
--Date
--Specs [Array]
---- [0] Name: "Height"
---- [0] Value: 100
---- [1] Name: "Weight"
---- [1] Value: 100

因此,我想要一个只包含对象的对象,其中specs - 数组包含一个带有Name" Power"的条目。

我尝试用array_map解决这个问题:

         return this.items.map((obj) => {
             let valObj = obj.specs.filter(function (elem) {
                 if (elem.Name == "Power") return elem.Value;
             });
             if (valObj.length > 0) {
                 return obj;
             }
         });

但不幸的是,array_map仅适用于数组,正如名称所示; - )

那么:有没有一种解决这个问题的好方法呢?

更新

创建了一个有效的代码,但可能不是很优雅; - )

itemsWithPower: function() {
                var items  = items;
                var list = [];

                var result = Object.keys(items).map(function(key) {
                    return items[key].Specs.filter(function(elem) {
                        if (elem.Name === "Power") list.push(items[key]);
                    });
                });             
                console.log(list);
            }

1 个答案:

答案 0 :(得分:0)

Array.map不会遍历对象,您必须先获取数组,例如对象键,例如

var items  = this.items;
var result = Object.keys(items).map(function(key) {
    return items[key].filter(function(obj) {
        return obj.Specs.Name === "Power";
    });
});