Как преобразовать два массива в карту в javascript

#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. спасибо за ответ, однако, если я хочу получить доступ к определенному значению ключа, как получить к нему доступ в этом?