首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较JSON中的信息,在列表中返回前几个结果

比较JSON中的信息,在列表中返回前几个结果
EN

Stack Overflow用户
提问于 2018-02-27 03:39:47
回答 2查看 45关注 0票数 2

给定以下JSON:

代码语言:javascript
复制
[
    {
        "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,并通过比较每个提要的长度返回“最有观察力的提要”。

代码语言:javascript
复制
/*
 * 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)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-27 03:50:52

记录最大值并比较每次的结果如何?也许只是将标签存储在数组中,因为这就是您要返回的所有内容?

代码语言:javascript
复制
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;
};
票数 1
EN

Stack Overflow用户

发布于 2018-02-27 03:57:19

我建议您使用第二个条件来检查bestFeed.datad.data是否具有相同的长度。在for循环中的第二个if语句后添加类似以下内容:

代码语言:javascript
复制
else if(bestFeed.data.length === d.data.length){  
    //do further checking here
}

在这个条件中,您可以再次比较bestfeedd (可能是timerange属性)。

我还建议您使用d之外的其他工具,例如iitem

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48995893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档