我想过滤包含对象的对象
,以仅获取包含具有特定值的数组的对象。
这是对象:
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);
}
最佳答案
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";
});
});
关于javascript - 对象的Array_map?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42025185/