我想过滤包含对象的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);
}
答案 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";
});
});