[英]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.