这是我正在获取的会话列表,现在我要删除所有会话,除非活动的是true
const token = 'xxxx-xxx-xxxxx-xxxx-xxxxx';
const session_list = [
{
"id": "45345345-4534-5435-d1cc1bdb6153410",
"device": "browser",
"ip": "xx.xx.xxx.xxx",
"city": null,
"country": null,
"browser_name": "Opera",
"browser_version": "67.0.3575.115",
"os_name": "Mac OS"
},
{
"id": "23213-34234-324234-4234324o",
"device": "browser",
"ip": "xx.xx.xxx.xxx",
"city": null,
"country": null,
"browser_name": "Mozila",
"browser_version": "67.0.3575.115",
"os_name": "Windows"
},
{
"id": "324234-sadasd34-sdsda343-3434234234",
"device": "browser",
"ip": "xx.xx.xxx.xxx",
"city": null,
"country": null,
"browser_name": "Opera",
"browser_version": "67.0.3575.115",
"os_name": "android",
"active": true
}
]
[现在,我想调用一个API来删除会话,现在它包含3件事,令牌是静态的,ip
,session_id
是我在session_list
数组中找到的现在,API通过传递必需的参数来一一删除会话。
const delete_session_api = async (data) => {
// delete the session
try {
const config = {
data: querystring.stringify(data),
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
};
const { data: api_res } =
await axios.delete('/sessions/delete', config);
return api_res;
} catch (error) {
throw error;
}
};
我全部想从session_list
中删除会话,但活动的true会话是相同的列表。有人可以帮助我实现这一目标吗?
您可以使用此简短功能在普通JavaScript中进行此操作
const filterActiveSessions = payload => ({
meta: payload.meta,
data: (payload.data || []).filter(session => session.active),
})
您还可以使用我的functional编程库rubico编写一个函数来删除非活动会话。我可以将其合并为一个函数,因为我使用该库编写了许多小函数。
const { pipe, fork, filter, get } = rubico
const payload = {
"meta": {
"message": "Sessions retrieved successfully."
},
"data": [
{
"id": "45345345-4534-5435-d1cc1bdb6153410",
"device": "browser",
"ip": "xx.xx.xxx.xxx",
"city": null,
"country": null,
"browser_name": "Opera",
"browser_version": "67.0.3575.115",
"os_name": "Mac OS"
},
{
"id": "23213-34234-324234-4234324o",
"device": "browser",
"ip": "xx.xx.xxx.xxx",
"city": null,
"country": null,
"browser_name": "Mozila",
"browser_version": "67.0.3575.115",
"os_name": "Windows"
},
{
"id": "324234-sadasd34-sdsda343-3434234234",
"device": "browser",
"ip": "xx.xx.xxx.xxx",
"city": null,
"country": null,
"browser_name": "Opera",
"browser_version": "67.0.3575.115",
"os_name": "android",
"active": true
}
],
}
// payload => payload_with_active_sessions_only
const filterActiveSessions = fork({
meta: get('meta'),
data: pipe([
get('data'),
filter(session => session.active),
]),
})
console.log(
filterActiveSessions(payload)
)
<script src="https://unpkg.com/rubico/index.js" crossorigin></script>
您可以如下直接使用Array.filter()方法。
说,如果您将其作为API响应的一部分,而您正在尝试在成功回调中处理它,并想返回活动的会话:
const activeSessions = response.data.filter(session => session.active);
或
return response.data.filter(session => session.active);
注意:如果条件适用于多个会话,则结果可能包含多个对象。
请参阅Mozilla开发人员网络Webdocs,以更好地了解Array.filter()。 Link here
UPDATE
有了新的要求,您要首先获取处于非活动状态的会话,并对每个会话进行API调用(一个接一个)以将其删除。
active
为not true
]的会话const inactiveSessionsList = sessions_list.filter(session => !session.active)
inactiveSessionsList.forEach(async (session)=> {
const payload = {token: token, ip: session.ip, session_id: session.id }
await delete_session_api(payload);
})
基于inactiveSessionsList中的项目数量,您将触发每个非活动会话的API调用。