给定以下JSON:
[
{
"group": "satellite-1",
"data": [
{
"label": "feed1-1_TargetA",
"data": [
{"timeRange": ["11:40:00 AM", "11:40:20 AM"], val: "TargetA"},
{"timeRange": ["11:40:20 AM", "11:40:40 AM"], val: "TargetA"},
{"timeRange": ["11:41:00 AM", "11:41:20 AM"], val: "TargetA"},
]
},
{
"label": "feed1-1_TargetB",
"data": [
{"timeRange": ["11:40:40 AM", "11:41:00 AM"], val: "TargetB"},
{"timeRange": ["11:41:00 AM", "11:41:20 AM"], val: "TargetB"}
]
},
{
"label": "feed1-1_TargetC",
"data": [
{"timeRange": ["11:40:40 AM", "11:41:00 AM"], val: "TargetC"},
{"timeRange": ["11:41:00 AM", "11:41:20 AM"], val: "TargetC"},
]
},
{
"label": "feed1-1_TargetD",
"data": [
{"timeRange": ["11:40:40 AM", "11:41:00 AM"], val: "TargetD"},
{"timeRange": ["11:41:00 AM", "11:41:20 AM"], val: "TargetD"},
]
},
{
"label": "feed1-2_TargetB",
"data": [
{"timeRange": ["11:40:20 AM", "11:40:40 AM"], val: "TargetB"}
]
}
]
},
{
"group": "satellite-2",
"data": [
{
"label": "feed2-1_TargetA",
"data": [
{"timeRange": ["11:40:20 AM", "11:40:40 AM"], val: "TargetA"},
{"timeRange": ["11:41:00 AM", "11:41:20 AM"], val: "TargetA"},
]
},
{
"label": "feed2-1_TargetB",
"data": [
{"timeRange": ["11:40:40 AM", "11:41:00 AM"], val: "TargetB"},
{"timeRange": ["11:41:00 AM", "11:41:20 AM"], val: "TargetB"}
]
},
{
"label": "feed2-1_TargetC",
"data": [
{"timeRange": ["11:40:40 AM", "11:41:00 AM"], val: "TargetC"},
{"timeRange": ["11:41:00 AM", "11:41:20 AM"], val: "TargetC"},
]
},
{
"label": "feed2-2_TargetB",
"data": [
{"timeRange": ["11:40:20 AM", "11:40:40 AM"], val: "TargetB"}
]
}
]
}
]我正在尝试比较哪些提要的目标数量最多。
到目前为止,我已经解决了这个问题,因为我可以遍历JSON,并通过比较每个提要的长度返回“最有观察力的提要”。
/*
* Compare length of each sensor block in data to determine which sensor
* is most observant
*/
var getMostObservantFeeds = function(entry){
var bestFeed = null;
for(var d of entry.data){
if (bestFeed == null){
bestFeed = d;
}
if (bestFeed.data.length < d.data.length){
bestFeed = d;
}
}
bestFeed = bestFeed || {};
return bestFeed.label
])
};
var getMostObservantFeed = function(data_JSON){
return data_JSON.map(x => getMostObservantFeeds(x));
};但是,当一个提要和另一个提要具有相同的长度时,我不能让它工作。
如果两个提要看到相同数量的目标(这是看到的最大数量),我该如何返回最佳提要的列表?(即satellite2: feed2-1_TargetA,feed2-1_TargetB,feed2-1_TargetC)
发布于 2018-02-27 03:50:52
记录最大值并比较每次的结果如何?也许只是将标签存储在数组中,因为这就是您要返回的所有内容?
var getMostObservantFeed = function(entry){
var bestLabels = [];
var max = 0;
for(var d of entry.data){
if (d.data.length >= max){
max = d.data.length;
bestLabels.push(d.label);
}
}
return bestLabels;
};发布于 2018-02-27 03:57:19
我建议您使用第二个条件来检查bestFeed.data和d.data是否具有相同的长度。在for循环中的第二个if语句后添加类似以下内容:
else if(bestFeed.data.length === d.data.length){
//do further checking here
}在这个条件中,您可以再次比较bestfeed和d (可能是timerange属性)。
我还建议您使用d之外的其他工具,例如i或item
https://stackoverflow.com/questions/48995893
复制相似问题