Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在包含复杂嵌套数组的javascript对象中查找项_Javascript_Arrays_Node.js_Filter - Fatal编程技术网

在包含复杂嵌套数组的javascript对象中查找项

在包含复杂嵌套数组的javascript对象中查找项,javascript,arrays,node.js,filter,Javascript,Arrays,Node.js,Filter,我需要在javascript对象中查找各种数组中的项。数组位于嵌套的javascript对象中。我已经实现了一种获取所需数据的方法,但它似乎非常冗长,有4个嵌套for循环 我意识到我可以使用for循环来迭代元素,但这不是最好的方法。我已经学会了如何使用filter函数来访问我感兴趣的顶级项目,但却很难学会如何过滤内部项目 在我下面的代码中,有趣的_行得到了适当的填充。下一步是创建所有元素的列表,其中measurement.value.label为“fw”,然后打印measurement.valu

我需要在javascript对象中查找各种数组中的项。数组位于嵌套的javascript对象中。我已经实现了一种获取所需数据的方法,但它似乎非常冗长,有4个嵌套for循环

我意识到我可以使用for循环来迭代元素,但这不是最好的方法。我已经学会了如何使用filter函数来访问我感兴趣的顶级项目,但却很难学会如何过滤内部项目

在我下面的代码中,有趣的_行得到了适当的填充。下一步是创建所有元素的列表,其中measurement.value.label为“fw”,然后打印measurement.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)} `);

由于
度量值
都是数组,因此必须对它们进行迭代

const morefiltered=interesting_lines.filter( element => { 
    return element.measurement.filter(a => {
        return a.value.filter(b => {
            return b.label == "fw";
        })
    })
});
并创建一个空数组并用匹配的值填充它:

//我们感兴趣的交叉线
让利息=[“进入”,“退出”];
让线={
“要素”:[{
“元素id”:2,
“元素名称”:“第2.1行”,
“传感器类型”:“多传感器”,
“数据类型”:“行”,
“发件人”:“2018-05-08T08:59:00Z”,
“致”:“2018-05-08T09:00:00Z”,
“决议”:“一分钟”,
“测量”:[{
“发件人”:“2018-05-08T08:59:00Z”,
“致”:“2018-05-08T09:00:00Z”,
“价值”:[{
“值”:0,
“标签”:“fw”
}, {
“值”:0,
“标签”:“bw”
}]
}]
}, {
“元素id”:3,
“元素名称”:“第2.2行”,
“传感器类型”:“多传感器”,
“数据类型”:“行”,
“发件人”:“2018-05-08T08:59:00Z”,
“致”:“2018-05-08T09:00:00Z”,
“决议”:“一分钟”,
“测量”:[{
“发件人”:“2018-05-08T08:59:00Z”,
“致”:“2018-05-08T09:00:00Z”,
“价值”:[{
“价值”:1,
“标签”:“fw”
}, {
“值”:0,
“标签”:“bw”
}]
}]
}, {
“元素id”:1,
“元素名称”:“条目”,
“传感器类型”:“多传感器”,
“数据类型”:“行”,
“发件人”:“2018-05-08T08:59:00Z”,
“致”:“2018-05-08T09:00:00Z”,
“决议”:“一分钟”,
“测量”:[{
“发件人”:“2018-05-08T08:59:00Z”,
“致”:“2018-05-08T09:00:00Z”,
“价值”:[{
“价值”:1,
“标签”:“fw”
}, {
“值”:0,
“标签”:“bw”
}]
}]
}, {
“元素id”:0,
“元素名称”:“退出”,
“传感器类型”:“多传感器”,
“数据类型”:“行”,
“发件人”:“2018-05-08T08:59:00Z”,
“致”:“2018-05-08T09:00:00Z”,
“决议”:“一分钟”,
“测量”:[{
“发件人”:“2018-05-08T08:59:00Z”,
“致”:“2018-05-08T09:00:00Z”,
“价值”:[{
“值”:0,
“标签”:“fw”
}, {
“值”:0,
“标签”:“bw”
}]
}]
}, {
“元素id”:4,
“元素名称”:“第2.3行”,
“传感器类型”:“多传感器”,
“数据类型”:“行”,
“发件人”:“2018-05-08T08:59:00Z”,
“致”:“2018-05-08T09:00:00Z”,
“决议”:“一分钟”,
“测量”:[{
“发件人”:“2018-05-08T08:59:00Z”,
“致”:“2018-05-08T09:00:00Z”,
“价值”:[{
“值”:0,
“标签”:“fw”
}, {
“值”:0,
“标签”:“bw”
}]
}]
}, {
“元素id”:5,
“元素名称”:“第2.4行”,
“传感器类型”:“多传感器”,
“数据类型”:“行”,
“发件人”:“2018-05-08T08:59:00Z”,
“致”:“2018-05-08T09:00:00Z”,
“决议”:“一分钟”,
“测量”:[{
“发件人”:“2018-05-08T08:59:00Z”,
“致”:“2018-05-08T09:00:00Z”,
“价值”:[{
“值”:0,
“标签”:“fw”
}, {
“值”:0,
“标签”:“bw”
}]
}]
}]
};
//console.log(`line in collection=${lines.element.length}`);//6.
//行名称上的筛选函数
所需功能\u行(项目){
对于(变量i=0;i>>
const morefiltered=有趣的线。过滤器(元素=>{
返回元素.measurement.filter(a=>{
返回a.value.filter(b=>{
如果(b.标签==“fw”){
push({name:element[“element name”],value:b.value});
返回true;
}
})
})
});
console.log('values:',JSON.stringify(values))

log(`2级过滤器:${JSON.stringify(morefiltered)}`)数据结构不是很好,因此如果您可以更改它,我建议您这样做,这反过来会使您的算法更简单

我已经尝试使用下划线为您解决问题,但我不完全确定这是您想要的

var myObjects = _.filter(lines.element, function(l){
  return _.any(interest, function(i){
    return l["element-name"] == i;
  });
});

预期的输出是什么?
测量值
是数组。
var myObjects = _.filter(lines.element, function(l){
  return _.any(interest, function(i){
    return l["element-name"] == i;
  });
});