Мне нужно найти элементы в объекте javascript, которые находятся в различных массивах. Массивы находятся во вложенном объекте javascript. Я реализовал способ получения нужных мне данных, но он кажется очень длинным с 4 вложенными циклами.
Я понимаю, что мог бы использовать цикл for для перебора элементов, но это не самый красивый способ. Я разобрался, как использовать функцию фильтра для доступа к интересующим меня элементам верхнего уровня, но изо всех сил пытался выяснить, как фильтровать внутренние элементы.
В моем коде ниже, интересно, строки заполняются соответствующим образом. Следующим этапом является создание списка всех элементов с измерением.value.label «fw», а затем печать чисел измерения. Как я могу это сделать?
// 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