You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 11:54:04