[英]Javascript Filter Objects in Array and return Property of Object in Array of Object in Array
Im trying to Filter this Array:我试图过滤这个数组:
var Zimmer = [{"Name":"F02A","Group":"Office","Devices":[
{"Name":"F02A-1313.01","Device":"00265BE98E8C53","Type":"HmIP-WTH-B"},
{"Name":"F02A-1315.03","Device":"00201BE9A13271","Type":"HmIP-eTRV-B"},
{"Name":"F02A-1354.01","Device":"00119A499C1313","Type":"HmIP-eTRV-C"}
]},
{"Name":"F1","Group":"Office","Devices":[
{"Name":"F1-1315.04","Device":"00201BE9A1381B","Type":"HmIP-eTRV-B"}
]},
{"Name":"F2","Group":"Klassenzimmer","Devices":[
{"Name":"F2-1315.02","Device":"00201BE9A137E5","Type":"HmIP-eTRV-B"}
]},
{"Name":"F6","Group":"Office","Devices":[
{"Name":"F6-1315.01","Device":"00201BE9A13290","Type":"HmIP-eTRV-B"}
]}]
And I want to output every Device with the Name F02A.我想 output 每个设备名称为 F02A。 example: 00265BE98E8C53 and than second output 00201BE9A13271.
例如:00265BE98E8C53 和第二个 output 00201BE9A13271。
For that I wrote the code为此,我编写了代码
msg.payload = Zimmer.forEach(element => element.filter(name => name.Name = "F02A"));
Can somebody help?有人可以帮忙吗?
You could take Array#flatMap
and check if the name starts with the wanted part.您可以使用
Array#flatMap
并检查名称是否以所需部分开头。
const zimmer = [{ Name: "F02A", Group: "Office", Devices: [{ Name: "F02A-1313.01", Device: "00265BE98E8C53", Type: "HmIP-WTH-B" }, { Name: "F02A-1315.03", Device: "00201BE9A13271", Type: "HmIP-eTRV-B" }, { Name: "F02A-1354.01", Device: "00119A499C1313", Type: "HmIP-eTRV-C" }] }, { Name: "F1", Group: "Office", Devices: [{ Name: "F1-1315.04", Device: "00201BE9A1381B", Type: "HmIP-eTRV-B" }] }, { Name: "F2", Group: "Klassenzimmer", Devices: [{ Name: "F2-1315.02", Device: "00201BE9A137E5", Type: "HmIP-eTRV-B" }] }, { Name: "F6", Group: "Office", Devices: [{ Name: "F6-1315.01", Device: "00201BE9A13290", Type: "HmIP-eTRV-B" }] }], result = zimmer.flatMap(({ Devices }) => Devices.flatMap(({ Name, Device }) => Name.startsWith('F02A')? Device: []) ); console.log(result);
Using reduce method to loop through your array then check condition(check 'Name' is matched) each array, if your condition match then use map to make your devices to array, then concat to output使用reduce方法循环遍历您的数组,然后检查条件(检查“名称”是否匹配)每个数组,如果您的条件匹配,则使用map使您的设备排列,然后连接到 output
Zimmer.reduce((acc,data)=>{
if(data.Name === "F02A"){
acc = acc.concat(data.Devices.map((device)=>device.Device))
}
return acc
},[])
// output: ["00265BE98E8C53", "00201BE9A13271", "00119A499C1313"]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.