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

如何判断对象数组中是否存在含指定字符串数组的Action键?

判断对象数组中是否存在指定Action数组的实现方法

要实现遍历对象数组并检查是否存在与目标数组完全一致的Action项,核心问题在于数组是引用类型,不能直接用===判断相等。下面提供两种可靠的实现方式:

方法一:自定义数组相等判断函数(严谨通用)

先实现一个函数判断两个数组是否完全相等(长度一致且对应位置元素相同),再结合Array.some()遍历对象数组,只要有一个匹配就返回true。

// 目标匹配数组
const targetActions = [ 'sqs:GetQueueAttributes', 'sqs:GetQueueUrl', 'sqs:SendMessage' ];

// 判断两个数组是否完全相等的工具函数
function arraysAreEqual(arr1, arr2) {
  // 长度不同直接返回false
  if (arr1.length !== arr2.length) return false;
  // 逐个对比对应位置的元素
  for (let i = 0; i < arr1.length; i++) {
    if (arr1[i] !== arr2[i]) return false;
  }
  return true;
}

// 示例数组
const policyArray = [
    {
      Action: [ 'logs:CreateLogDelivery' ],
    },
    {
      Action: [ 'sqs:GetQueueAttributes', 'sqs:GetQueueUrl', 'sqs:SendMessage' ],
      Effect: 'Allow',
      Resource: {
        'Fn::ImportValue': 'XXXXXX'
      }
    }
];

// 执行判断
const hasMatchingAction = policyArray.some(item => arraysAreEqual(item.Action, targetActions));
console.log(hasMatchingAction); // 输出:true

方法二:数组转字符串对比(简洁高效)

如果确定Action数组的元素中不包含分隔符(比如逗号),可以将数组转为字符串后直接对比,代码更简洁:

const targetActions = [ 'sqs:GetQueueAttributes', 'sqs:GetQueueUrl', 'sqs:SendMessage' ];
const targetStr = targetActions.join(',');

const policyArray = [/* 你的示例数组 */];

const hasMatchingAction = policyArray.some(item => item.Action.join(',') === targetStr);
console.log(hasMatchingAction); // 输出:true

注意事项

  • 若要求不考虑元素顺序的匹配,可在转字符串前先对两个数组排序:arr.sort().join(',')
  • 方法二的局限性:如果数组元素包含分隔符(比如逗号),会导致对比错误,此时推荐使用方法一。

内容的提问来源于stack exchange,提问作者Luke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 02:15:34