#javascript
#javascript
Вопрос:
У меня есть два массива, которые выглядят следующим образом:
array1 = ["org1", "org2", "org3"];
array2 = ["a", "b", "c"];
Используя JavaScript, я хочу преобразовать два массива одинаковой длины в массив объектов, которые будут выглядеть следующим образом:
orgMSPID = [{"org1": "a"},{"org2": "b"}, {"org3": "c"}]
Пожалуйста, кто-нибудь подскажет мне, как его преобразовать?
Ответ №1:
Вы можете использовать Array.map() для итерации array1
и использования []
для динамического ключа объекта.
const array1 = ["org1", "org2", "org3"];
const array2 = ["a", "b", "c"];
const orgMPSID = array1.map((key, index) => ({ [key]: array2[index] }));
console.log(orgMPSID);
Комментарии:
1. спасибо за ответ, однако, если я хочу получить доступ к определенному значению ключа, как получить к нему доступ в этом?
2. как я упоминал в ответе, используйте
[]
для указания динамического ключа3. не могли бы вы привести пример этого?
4. если нет скобки типа {key: «123»}, это будет указывать на {key: «123»}, если вы укажете скобку типа { [key]: «123»}, то key — это переменная, определенная выше (предположим, const key=»abc»}, и конечнаярезультатом будет {abc: «123»}
Ответ №2:
Архивирование двух (или более) массивов вместе — довольно распространенная операция. Если вы используете библиотеку с помощниками, велика вероятность, что она включает вспомогательную функцию для этого (часто называемую zip
). Если вы не используете вспомогательную библиотеку, подумайте о добавлении zip
функции самостоятельно.
zip([1,2,3], [4,5,6]) //=> [[1,4], [2,5], [3,6]]
Затем каждую запись в этом результате можно легко преобразовать в объект, используя любую из приведенных ниже строк:
entries.map(entry => Object.fromEntries(Array.of(pair)));
entries.map(entry => Object.fromEntries([entry]));
entries.map(([key, value]) => ({ [key]: value }));
const zip = (...args) => args[0].map((_, i) => args.map(arg => arg[i]));
const array1 = ["org1", "org2", "org3"];
const array2 = ["a", "b", "c"];
const result = zip(array1, array2).map(([key, value]) => ({ [key]: value }));
console.log(result);
Комментарии:
1. Некоторые библиотеки, предоставляющие
zip
функцию, также иногда имеютzipWith
, которая позволяет выполнять архивирование и сопоставление за один вызов. Используя Lodash , то_.zipWith(array1, array2, (key, value) => ({[key]: value}))
есть при использовании Ramda функция является первым аргументом:R.zipWith((key, value) => ({[key]: value}), array1, array2)
2. @VLAZ вы решаете мои многочисленные проблемы с комментариями, используя Lodash, его удивительную библиотеку. Большое спасибо
Ответ №3:
let array1 = ["org1", "org2", "org3"];
let array2 = ["a", "b", "c"];
let array3 = [];
for(let i=0; i< array1.length; i ){
let item = {};
item[array1[i]]=array2[i];
array3.push(item)
}
console.log(array3);
Комментарии:
1. спасибо за ответ, однако, если я хочу получить доступ к определенному значению ключа, как получить к нему доступ в этом?
Ответ №4:
Вы можете использовать Array.prototype.reduce()
.
Вы выполняете итерацию array1
и используете текущий индекс для ссылки array2
(или вместо этого вы можете перевернуть его другим способом).
const array1 = ["org1", "org2", "org3"];
const array2 = ["a", "b", "c"];
const orgMSPID = array1.reduce((c, e, i) => {
c.push({ [e] : array2[i] });
return c;
}, []);
console.log(orgMSPID);
Комментарии:
1. спасибо за ответ, однако, если я хочу получить доступ к определенному значению ключа, как получить к нему доступ в этом?