JavaScript中如何结合every与filter方法实现数组公共值校验及唯一值提取
解决方案
直接用reduce单次遍历就能同时得到两个结果,不需要分开调用every和filter遍历两次数组,返回结果和原有逻辑完全一致:
// 入参为营销航司代码数组、承运航司代码数组 function getCarrierCodeResult(marketingArr, operatingArr) { // 初始默认所有承运航司代码都在营销数组中存在、独有元素列表为空 return operatingArr.reduce((result, currentCode) => { const isInMarketing = marketingArr.indexOf(currentCode) !== -1 // 只要有一个承运代码不在营销数组,全匹配标识就置为false,同时将该代码加入独有列表 if (!isInMarketing) { result.hasSameCarrierCode = false result.listOfOperatingCarriers.push(currentCode) } return result }, { hasSameCarrierCode: true, listOfOperatingCarriers: [] }) }
调用示例
const marketingCarrierCode = ["DL", "AA"] const operatingCarrierCode = ["AA", "AA"] const { hasSameCarrierCode, listOfOperatingCarriers } = getCarrierCodeResult(marketingCarrierCode, operatingCarrierCode) // 输出结果和原有逻辑完全一致: // hasSameCarrierCode: true // listOfOperatingCarriers: []
性能优化版
如果营销航司数组元素较多,可以先转成Set降低查找复杂度:
function getCarrierCodeResult(marketingArr, operatingArr) { const marketingSet = new Set(marketingArr) return operatingArr.reduce((result, currentCode) => { const isInMarketing = marketingSet.has(currentCode) if (!isInMarketing) { result.hasSameCarrierCode = false result.listOfOperatingCarriers.push(currentCode) } return result }, { hasSameCarrierCode: true, listOfOperatingCarriers: [] }) }
内容的提问来源于stack exchange,提问作者amr369
相关产品推荐
相关产品推荐

