В моем коде у меня есть фрагмент кода ниже
const accountEnv = 'Prod'
const accPermissionMap = {}
Object.values(Accounts).forEach(account => { const adminRole = ImportableRole.fromRoleArn(this, `${account.account}-Role`, 'arn:aws:iam::' + account.account + ':role/Admin')})
В результате внутри цикла foreach он будет присваивать следующие значения переменной «account» во время выполнения цикла.
ImportableRole.fromRoleArn(this, `Prod-Role`, 'arn:aws:iam::' + Prod + ':role/Admin')
ImportableRole.fromRoleArn(this, `UAT-Role`, 'arn:aws:iam::' + UAT + ':role/Admin')
ImportableRole.fromRoleArn(this, `MT-Role`, 'arn:aws:iam::' + MT + ':role/Admin')
ImportableRole.fromRoleArn(this, `Dev-Role`, 'arn:aws:iam::' + Dev + ':role/Admin')
Я пытаюсь
Итак, после добавления «accPermissionMap» должно быть что-то похожее на
{
Key: Prod, Value: ImportableRole.fromRoleArn(this, `Prod-Role`, 'arn:aws:iam::' + Prod + ':role/Admin')
Key: UAT, Value: ImportableRole.fromRoleArn(this, `UAT-Role`, 'arn:aws:iam::' + UAT + ':role/Admin')
Key: MT, Value: ImportableRole.fromRoleArn(this, `MT-Role`, 'arn:aws:iam::' + MT + ':role/Admin')
Key: Dev, Value: ImportableRole.fromRoleArn(this, `Dev-Role`, 'arn:aws:iam::' + Dev + ':role/Admin')
}
Может ли кто-нибудь предложить обходной путь?
Также, пожалуйста, добавьте определение Accounts и fromRoleArn, укажите, что такое this, предоставьте ожидаемое содержание accPermissionMap. Пожалуйста, сосредоточьтесь только на одном вопросе.
что-то вроде? accPermissionMap[account.account] = ImportableRole.fromRoleArn(this, `${account.account}-Role`, 'arn:aws:iam::' + account.account + ':role/Admin')
@trincot Вопрос отредактирован в соответствии с вашими предложениями. Да, в цикле я не использовал ни карты, ни имени переменной, потому что не понимаю, как его использовать. Только для этого мне нужен обходной путь.
@cmgchess Спасибо за ответ, но он не работает
Желаемый результат невозможен: объект не может иметь дважды один и тот же ключ. Также убедитесь, что желаемый вывод использует предполагаемый синтаксис. Являются ли Prod, UAT, ... переменными? И повторюсь: пожалуйста, добавьте определение Accounts и fromRoleArn, уточните, что такое this.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете добавить каждый объект ImportableRole в accPermissionMap, используя account.account в качестве ключа. Затем переберите ключи accPermissionMap и проверьте, соответствует ли какой-либо из них значению accountEnv. Если совпадение найдено, вы можете выполнить желаемое действие с помощью соответствующего ImportableRole. Кроме того, убедитесь, что у вас есть необходимые операторы импорта и что объект Accounts определен правильно.
const accountEnv = 'Prod';
const accPermissionMap = {};
Object.values(Accounts).forEach(account => {
const adminRole = ImportableRole.fromRoleArn(this, `${account.account}-Role`, 'arn:aws:iam::' + account.account + ':role/Admin');
accPermissionMap[account.account] = adminRole; // Add each ImportableRole to accPermissionMap
});
// Check which ImportableRole item is equal to accountEnv
Object.keys(accPermissionMap).forEach(account => {
if (account === accountEnv) {
// If it matches, perform the desired action
const matchedRole = accPermissionMap[account];
// Do something with the matched role
console.info(`Found a match for accountEnv (${accountEnv}) with role:`, matchedRole);
// Perform your desired action with the matched role
}
});
@Adrian Большое спасибо за вашу помощь. Чтобы получить доступ к учетной записи, я использовал как ${accPermissionMap[account], но решение находится на месте. Спасибо за вас обоих
@ ShanWave007 Я только что внес некоторые косметические изменения в сообщение. Ответ лежит на Анмоле.
спасибо @AdrianMole и вам :) это мой первый ответ на сообщение. Спасибо за мелкие поправки. Когда я сделаю свой дальнейший вклад, я буду иметь в виду эти идеи.
«Я пытаюсь…». Спасибо за код, но я не вижу в этом коде попытки выполнить какой-либо из двух пунктов, которые вы перечисляете: в цикле нет ни
accPermissionMap, ниaccountEnv. Что вы пробовали?