如何按指定固定顺序将Cookie数组拼接为标准Cookie请求字符串
完全可以结合map和startsWith方法实现该需求,逻辑简洁高效,以下是具体实现方案:
实现思路
- 遍历预设的键顺序数组
keyOrder,保证最终输出的顺序符合要求 - 对每个目标键,用
startsWith匹配原始Cookie数组中对应条目,匹配时额外拼接=符号,避免键名相似导致的误匹配 - 截取匹配到的Cookie条目中第一个分号前的内容,丢弃
HttpOnly、Path等仅浏览器识别的属性,只保留请求头Cookie需要的键值对 - 所有处理好的键值对用
;拼接即可得到符合要求的Cookie字符串
完整实现代码
// 原始Cookie数组 const cookie = [ '__uzma=e6954f29-7e77-4beb-a278-5fd2b628763d; HttpOnly; path=/; Expires=Thu, 05-May-22 17:41:57 GMT; Max-Age=15724800', '__uzmb=1636047717; HttpOnly; path=/; Expires=Thu, 05-May-22 17:41:57 GMT; Max-Age=15724800', '__uzmc=767031033660; HttpOnly; path=/; Expires=Thu, 05-May-22 17:41:57 GMT; Max-Age=15724800', '__uzmd=1636047717; HttpOnly; path=/; Expires=Thu, 05-May-22 17:41:57 GMT; Max-Age=15724800', 'JSESSIONID="7kibk5hbeCNhPyQscS9ZKcZn.nodelx219:mobnbcinter01p-lx219"; Version=1; Path=/sinbc; Secure', 'bJ1spGC0yyDM=v1TQPygxWcMCu; Expires=Thu, 04-Nov-2021 17:56:57 GMT; Path=/' ] // 要求的固定键顺序 const keyOrder = [ 'JSESSIONID', '__uzma', '__uzmb', '__uzmc', '__uzmd', 'bJ1spGC0yyDM' ] // 核心处理逻辑 const cookieStr = keyOrder.map(key => { // 匹配对应键的Cookie条目 const targetItem = cookie.find(item => item.startsWith(`${key}=`)) // 截取键值对部分,丢弃后续属性 return targetItem.split(';')[0] }).join('; ') console.log(cookieStr)
兼容缺键的优化写法
如果可能出现部分键不存在的场景,可以增加空值过滤,避免出现无效的空拼接项:
const cookieStr = keyOrder.map(key => { const targetItem = cookie.find(item => item.startsWith(`${key}=`)) return targetItem ? targetItem.split(';')[0] : '' }).filter(Boolean).join('; ')
内容的提问来源于stack exchange,提问作者rafaelpolonio
相关产品推荐
相关产品推荐

