Terraform 对象列表,如何组合具有两个键且具有相同值的对象
我正在创建一个模块来创建IAM角色。消费者将提供类似的服务Terraform 对象列表,如何组合具有两个键且具有相同值的对象,terraform,Terraform,我正在创建一个模块来创建IAM角色。消费者将提供类似的服务 role_cross_account_config = [{ account_ids = ["1111112222222","333332222222"] external_id = "yesss" require_mfa = true },{ account_ids = ["845666666666"
role_cross_account_config = [{
account_ids = ["1111112222222","333332222222"]
external_id = "yesss"
require_mfa = true
},{
account_ids = ["845666666666"]
external_id = "dsaa"
require_mfa = false
},{
account_ids = ["7777788888888","6666444444444"]
external_id = "dsaa"
require_mfa = false
},{
account_ids = ["555564444444"]
external_id = "yesss"
require_mfa = true
},{
account_ids = ["3333399997777"]
external_id = null
require_mfa = true
},{
account_ids = ["64558888888","24331551111","77788644433"]
external_id = "yesss"
require_mfa = true
}]
new_list = [{
account_ids = ["1111112222222","333332222222","555564444444","64558888888","24331551111","77788644433"]
external_id = "yesss"
require_mfa = true
},{
account_ids = ["845666666666","7777788888888","6666444444444"]
external_id = "dsaa"
require_mfa = false
},{
account_ids = ["3333399997777"]
external_id = null
require_mfa = true
}]
我正在尝试将具有相同值的external_id
和require_mfa
的所有对象合并到一个具有所有帐户id
所以我应该买这样的东西
role_cross_account_config = [{
account_ids = ["1111112222222","333332222222"]
external_id = "yesss"
require_mfa = true
},{
account_ids = ["845666666666"]
external_id = "dsaa"
require_mfa = false
},{
account_ids = ["7777788888888","6666444444444"]
external_id = "dsaa"
require_mfa = false
},{
account_ids = ["555564444444"]
external_id = "yesss"
require_mfa = true
},{
account_ids = ["3333399997777"]
external_id = null
require_mfa = true
},{
account_ids = ["64558888888","24331551111","77788644433"]
external_id = "yesss"
require_mfa = true
}]
new_list = [{
account_ids = ["1111112222222","333332222222","555564444444","64558888888","24331551111","77788644433"]
external_id = "yesss"
require_mfa = true
},{
account_ids = ["845666666666","7777788888888","6666444444444"]
external_id = "dsaa"
require_mfa = false
},{
account_ids = ["3333399997777"]
external_id = null
require_mfa = true
}]
我能够做到这一点,但仅适用于那些共享相同值的require_mfa
和external_id=null
的对象,这是通过使用for循环和if-else逻辑实现的。我绞尽脑汁想找到解决这个问题的办法,但到目前为止还没有找到任何解决办法
注:
是布尔值require_mfa
是字符串external\u id
可以有任何值。这意味着消费者可以使用自己选择的外部\u id
输入尽可能多的对象。我正在尝试组合任何共享相同值的外部_id和require_mfa的对象外部\u id
new_list = [{
account_ids: [],
external_id: "yesss",
require_mfa: true
},{
account_ids: [],
external_id: "dsaa",
require_mfa: false
},{
account_ids: [],
external_id: null,
require_mfa: false
}]
role_cross_account_config = [{
account_ids : ["1111112222222","333332222222"],
external_id : "yesss",
require_mfa : true
},{
account_ids : ["845666666666"],
external_id : "dsaa",
require_mfa : false
},{
account_ids : ["7777788888888","6666444444444"],
external_id : "dsaa",
require_mfa : false
},{
account_ids : ["555564444444"],
external_id : "yesss",
require_mfa : true
},{
account_ids : ["3333399997777"],
external_id : null,
require_mfa : true
},{
account_ids : ["64558888888","24331551111","77788644433"],
external_id : "yesss",
require_mfa : true
}]
for (let i = 0; i < role_cross_account_config.length; i++) {
if (role_cross_account_config[i]['external_id'] === 'yesss' && role_cross_account_config[i]['require_mfa'] === true) {
for (let j = 0; j < role_cross_account_config[i]['account_ids'].length; j++) {
new_list[0]['account_ids'].push(role_cross_account_config[i]['account_ids'][j])
}
}
}
console.log(new_list)
新列表=[{
帐户ID:[],
外部_id:“是”,
要求(mfa):对
},{
帐户ID:[],
外部_id:“dsaa”,
需要_mfa:错误
},{
帐户ID:[],
外部_id:null,
需要_mfa:错误
}]
角色\u交叉\u帐户\u配置=[{
帐户ID:[“111111222222”,“3333322222222”],
外部_id:“是”,
要求(mfa):对
},{
帐户ID:[“84566666”],
外部_id:“dsaa”,
需要_mfa:错误
},{
帐户ID:[“7777788888”,“666644444”],
外部_id:“dsaa”,
需要_mfa:错误
},{
帐户ID:[“5555644444”],
外部_id:“是”,
要求(mfa):对
},{
帐户ID:[“33333 9999777”],
外部_id:null,
要求(mfa):对
},{
帐户ID:[“6455888888”、“24331551111”、“77788644433”],
外部_id:“是”,
要求(mfa):对
}]
for(设i=0;i
您可以使用else在“if”语句中添加其他组合,如“dsaa”和“false”、“dsaa”和“true”。无论您希望比较什么组合。现在我更好地了解了您需要什么,我已经为您找到了解决方案。您需要创建一个函数使其工作。我前面提到的相同问题仍然适用,您需要将其设置为带有“:”而不是“=”的真正对象键/值对 基本上,代码遍历对象数组“role_cross…”,并将“external id”和“require_mfa”与数组中的所有其他对象进行比较。如果找到两者的匹配项,则将这些值存储在一个称为“checkedVal”的单独数组中。函数“alreadyChecked”在迭代之前检查“checkedVal”是否已检查组合(例如:yesss和true),如果已检查,则移动到下一个要比较的对象 一旦通过所有检查,它将在“new_list”数组中创建一个新的“object”,并使用预定义的键。这使得向数组中新创建的对象添加适当的值变得非常容易。如果您对任何零件有疑问,请告诉我 我想这应该能帮你解决问题。代码如下:
let new_list = [{}]
let checkedVal = [['init1','init2']]
let nextNewEntry = 0
role_cross_account_config = [{
account_ids : ["1111112222222","333332222222"],
external_id : "yesss",
require_mfa : true
},{
account_ids : ["845666666666"],
external_id : "dsaa",
require_mfa : false
},{
account_ids : ["7777788888888","6666444444444"],
external_id : "dsaa",
require_mfa : false
},{
account_ids : ["555564444444"],
external_id : "yesss",
require_mfa : true
},{
account_ids : ["3333399997777"],
external_id : null,
require_mfa : true
},{
account_ids : ["64558888888","24331551111","77788644433"],
external_id : "yesss",
require_mfa : true
}]
function alreadyChecked(external, mfa) {
for (k=0; k < checkedVal.length; k++) {
if (checkedVal[k][0] === external && checkedVal[k][1] === mfa) {
console.log('Already checked this combination '+external+' '+mfa)
return true
} else if (k === checkedVal.length -1) {
console.log('Have not checked this yet '+external+' '+mfa)
return false
}
}
}
for (let i = 0; i < role_cross_account_config.length; i++) {
if (alreadyChecked(role_cross_account_config[i]['external_id'],role_cross_account_config[i]['require_mfa'])===false) {
console.log('moving forward with the iterations')
nextNewEntry++;
checkedVal[nextNewEntry-1] = []
checkedVal[nextNewEntry-1].push(role_cross_account_config[i]['external_id'],role_cross_account_config[i]['require_mfa'])
new_list[nextNewEntry-1] = {
account_ids: [],
external_id: '',
require_mfa: ''
}
for (let j = 0; j < role_cross_account_config.length; j++) {
if (role_cross_account_config[i]['external_id'] === role_cross_account_config[j]['external_id'] && role_cross_account_config[i]['require_mfa'] === role_cross_account_config[j]['require_mfa']) {
for (let h = 0; h < role_cross_account_config[j]['account_ids'].length; h++) {
new_list[nextNewEntry-1]['account_ids'].push(role_cross_account_config[j]['account_ids'][h]);
new_list[nextNewEntry-1]['external_id'] = role_cross_account_config[i]['external_id'];
new_list[nextNewEntry-1]['require_mfa'] = role_cross_account_config[i]['require_mfa'];
}
}
}
}
}
console.log(new_list)
console.log(checkedVal)
let new_list=[{}]
让checkedVal=[['init1','init2']]
设nextNewEntry=0
角色\u交叉\u帐户\u配置=[{
帐户ID:[“111111222222”,“3333322222222”],
外部_id:“是”,
要求(mfa):对
},{
帐户ID:[“84566666”],
外部_id:“dsaa”,
需要_mfa:错误
},{
帐户ID:[“7777788888”,“666644444”],
外部_id:“dsaa”,
需要_mfa:错误
},{
帐户ID:[“5555644444”],
外部_id:“是”,
要求(mfa):对
},{
帐户ID:[“33333 9999777”],
外部_id:null,
要求(mfa):对
},{
帐户ID:[“6455888888”、“24331551111”、“77788644433”],
外部_id:“是”,
要求(mfa):对
}]
已检查功能(外部,mfa){
对于(k=0;k