我有一个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,ID 12。
如果我要在数组中搜索ID 9
,可以在“已完成”中找到,然后返回该ID(9
)。
如果我要在数组中搜索ID 12
,那么可以在“未完成”中找到,返回未完成的第一个ID,ID 12。
希望这是有道理的。
我一直在搜索数组进行一些测试,但根本没有运气
const test = _.findKey(game_ids, function(o) { return o.game_id == 8; });
答案 0 :(得分:1)
这是一个纯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;
}
答案 1 :(得分:1)
因此,在基本级别,您需要遍历两个数组才能找到一些值。
你提到lodash有一个great find
utility function。有了这个功能,你可以调用这个函数两次,每个数组一次。确保处理没有找到游戏的情况。
例如:
ServletOutputStream servletOutputStream = httpServletResponse.getOutputStream();
CsvWriterSettings csvWriterSettings = new CsvWriterSettings();
csvWriterSettings.setAutoConfigurationEnabled(true);
CsvWriter csvWriter = new CsvWriter(servletOutputStream, csvWriterSettings);
csvWriter.addValues(settlementSummaryDTOs);
httpServletResponse.setContentType("text/csv");
httpServletResponse.setHeader("Content-Disposition", "attachment; filename=settlement.csv");
csvWriter.flush();
答案 2 :(得分:1)
如果在完成时未找到游戏ID,则使用skb
短路来尝试未完成,如果找不到任何内容则返回完成的第1个:
_.find()
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));