繁体   English   中英

在嵌套数组中搜索并从该数组返回值?

[英]Search in a nested array and return a value from that array?

我有一个API端点,该端点返回带有一堆游戏ID的JSON响应。 该响应看起来像这样(是的,它被严重窃听了)​​。

{
"finished": [
        {
        "game_id": 8
        },
        {
        "game_id": 9
        },
        {
        "game_id": 11
        }
    ],
"unfinished": [
        {
        "game_id": 12
        },
        {
        "game_id": 13
        }
    ]
}

我想要实现的目标可能需要一堆单独的功能。 但是我想在数组中搜索用户输入的特定ID。 然后根据它在“完成”还是“未完成”中,返回该键的值。

假设我要在数组中搜索ID为13 该ID将在“未完成”中找到。 如果是这种情况,我想返回“未完成”数组中的第一个ID,即ID 12。

如果我要在数组中搜索ID 9 ,则可以在“完成”中找到ID 9 ,然后返回该ID( 9 )。

如果我要在数组中搜索ID 12 ,则可以在“未完成”中找到ID 12 ,然后从未完成的ID 12中返回第一个ID。

希望这是有道理的。

我只是在搜索数组时一直在做一些测试,但是根本没有运气

const test = _.findKey(game_ids, function(o) { return o.game_id == 8; });

这是一个纯JavaScript解决方案:

var response = {"finished":[{"game_id":8},{"game_id":9},{"game_id":11}],"unfinished":[{"game_id":12},{"game_id":13}]};

function find(response, value) {
    var i;
    for (i = 0; i < response.finished.length; i++) {
        if (response.finished[i].game_id === value) {
            return value;
        }
    }

    for (i = 0; i < response.unfinished.length; i++) {
        if (response.unfinished[i].game_id === value) {
            return response.unfinished[0].game_id;
        }
    }

    return undefined;
}

因此,从根本上讲,您需要遍历两个数组以找到一些值。

你提到lodash其中有一个很大的find效用函数 有了此函数,您将调用此函数两次,每个数组一次。 确保处理找不到游戏的情况。

例如:

var targetVal = userInput; 
game_id = _.find(apiResponse. finished, { game_id: targetVal })

如果未在完成中找到游戏ID,则使用_.find()进行短路尝试未完成,如果未找到游戏ID,则返回完成的第1个:

 const data = {"finished":[{"game_id":8},{"game_id":9},{"game_id":11}],"unfinished":[{"game_id":12},{"game_id":13}]}; const findId = (game_id) => _.find(data.finished, { game_id }) || (_.find(data.unfinished, { game_id }) && data.unfinished[0]) || data.unfinished[0]; console.log(findId(13)); console.log(findId(9)); console.log(findId(200)); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM