【发布时间】:2018-05-08 14:17:04
【问题描述】:
我需要在各种数组中的 javascript 对象中查找项目。数组位于嵌套的 javascript 对象中。我已经实现了一种获取所需数据的方法,但它似乎很长,有 4 个嵌套的 for 循环。
我意识到我可以使用 for 循环来遍历元素,但这不是最漂亮的方式。我已经研究了如何使用过滤器功能来访问我感兴趣的顶级项目,但努力研究如何过滤内部项目。
在我下面的代码中,interesting_lines 得到了适当的填充。下一阶段是创建一个包含 measure.value.label 为“fw”的所有元素的列表,然后打印 measure.value.value 数字。我该怎么做?
// lines crossed that we are interested in
let interest = ["Entry", "Exit"];
let lines = {"element":[{"element-id":2,"element-name":"line_2.1","sensor-type":"MULTI_SENSOR","data-type":"LINE","from":"2018-05-08T08:59:00Z","to":"2018-05-08T09:00:00Z","resolution":"ONE_MINUTE","measurement":[{"from":"2018-05-08T08:59:00Z","to":"2018-05-08T09:00:00Z","value":[{"value":0,"label":"fw"},{"value":0,"label":"bw"}]}]},{"element-id":3,"element-name":"line_2.2","sensor-type":"MULTI_SENSOR","data-type":"LINE","from":"2018-05-08T08:59:00Z","to":"2018-05-08T09:00:00Z","resolution":"ONE_MINUTE","measurement":[{"from":"2018-05-08T08:59:00Z","to":"2018-05-08T09:00:00Z","value":[{"value":1,"label":"fw"},{"value":0,"label":"bw"}]}]},{"element-id":1,"element-name":"Entry","sensor-type":"MULTI_SENSOR","data-type":"LINE","from":"2018-05-08T08:59:00Z","to":"2018-05-08T09:00:00Z","resolution":"ONE_MINUTE","measurement":[{"from":"2018-05-08T08:59:00Z","to":"2018-05-08T09:00:00Z","value":[{"value":1,"label":"fw"},{"value":0,"label":"bw"}]}]},{"element-id":0,"element-name":"Exit","sensor-type":"MULTI_SENSOR","data-type":"LINE","from":"2018-05-08T08:59:00Z","to":"2018-05-08T09:00:00Z","resolution":"ONE_MINUTE","measurement":[{"from":"2018-05-08T08:59:00Z","to":"2018-05-08T09:00:00Z","value":[{"value":0,"label":"fw"},{"value":0,"label":"bw"}]}]},{"element-id":4,"element-name":"line_2.3","sensor-type":"MULTI_SENSOR","data-type":"LINE","from":"2018-05-08T08:59:00Z","to":"2018-05-08T09:00:00Z","resolution":"ONE_MINUTE","measurement":[{"from":"2018-05-08T08:59:00Z","to":"2018-05-08T09:00:00Z","value":[{"value":0,"label":"fw"},{"value":0,"label":"bw"}]}]},{"element-id":5,"element-name":"line_2.4","sensor-type":"MULTI_SENSOR","data-type":"LINE","from":"2018-05-08T08:59:00Z","to":"2018-05-08T09:00:00Z","resolution":"ONE_MINUTE","measurement":[{"from":"2018-05-08T08:59:00Z","to":"2018-05-08T09:00:00Z","value":[{"value":0,"label":"fw"},{"value":0,"label":"bw"}]}]}]};
console.log(`lines in collection=${lines.element.length}`); // 6
// filter function on line name
function required_line(item) {
for(var i = 0; i < interest.length; ++i) {
if (item["element-name"] == interest[i]) {
return true;
}
}
return false;
}
const interesting_lines = lines.element.filter(required_line);
console.log(`result of filter: ${JSON.stringify(interesting_lines)} `);
// filter out by label - eg fwd???
var morefiltered=interesting_lines.filter( function(element) { return element["measurement"]["value"]["label"] == "fw"; });
// above line fails - TypeError: Cannot read property 'label' of undefined
console.log(`2nd level filter: ${JSON.stringify(morefiltered)} `);
我的预期输出是:
forward line crossing numbers:
line name: Entry, value: 1
line name: Exit, value: 0
【问题讨论】:
-
预期的输出究竟是什么?
-
measurement和value是数组。
标签: javascript arrays node.js filter