Реагировать: добавлять значения из массива в другой массив

#javascript

#javascript

Вопрос:

Я пытаюсь выполнить такую операцию, но я не понимаю, как это сделать.

У меня есть два массива:

array1 = [elem1, elem2, elem3]

и второй массив:

array2 = [elemA, elemB, elemC]

Что я хотел бы получить, так это:

 arrayFinal = [elem1:elemA, elem2:elemB, elem3:elemC]
  

Как я могу сделать??

Большое вам спасибо.

Редактировать:

arrayFinal — это не key:value, но элемент1:elemA — это только первое значение, элемент2:elemB — это второе значение, например, с использованием объединения.

ПРАВКА2:

Я привожу пример значения массива:

 array1 = [0, 20, 40, 60, 80]
array2 = [-97:61:-1008; -97:60:-1008; -97:73:-1006, -98:70:-1008]

arrayFinal = [0:-96:61:-1009, 20:-97:61:-1008, 40:-97:60:-1008, 60:-97:73:-1006, 80:-98:70:-1008]
  

Комментарии:

1. итак, elem1 используется как ключ, а elemA — как значение?

2. Вы должны предоставить логику сопоставления, должен ли индекс 1 массива 1 использоваться в качестве ключа для индекса 1 массива 2?

3. что это значит elem1:elemA ? Является ли конечная структура массивом пар?

4. Это объект, который вы хотите вернуть {elem1:elemA, elem2:elemB, elem3:elemC} или массив, содержащий массивы — [[elem1,elemA], [elem2,elemB], [elem3,elemC]] ?

5. извините, но весь ваш синтаксис массивов странный, вы не можете использовать : и ; в массиве

Ответ №1:

Я вижу, что в ответах / комментариях происходит большая путаница, некоторые люди думают, что вы хотите объединить массивы в пары ключ / значение, в то время как другие думают, что вы хотите объединить массивы, в то время как другие думают, что вы хотите сделать это массивом, где array1 — это индекс, а array2 — значение по этому индексу.

Все это вызвано вашим форматированием [Elem1:ElemA, Elem2:ElemB]. который, насколько мне известно, даже не является допустимым JS.

Однако вы отредактировали свой вопрос, и теперь кажется, что вы хотите объединить их следующим образом [[Elem1, ElemA], [Elem2, ElemB]] , и в этом случае вы можете сделать это действительно легко таким образом:

 const array1 = ["elem1", "elem2", "elem3"];
const array2 = [1, 2, 3];

const result = array1.map((key, i) => [key, array2[i]]);
  

это даст результат: [ [ 'elem1', 1 ], [ 'elem2', 2 ], [ 'elem3', 3 ] ]

Комментарии:

1. Спасибо за ваш ответ! по вашему мнению, есть способ написать так: [elem1:1] Я делал что-то подобное раньше: « [this.timeStampRight, …array2].join(«:»)«

2. да, но это просто берет массив, а затем создает из него строку с помощью : between, тогда это больше не будет массивом, если вы сделаете arr = [1:2, 3:4] вы получите синтаксическую ошибку. поверьте мне…. вы заставили меня сомневаться в себе, и я проверил…

3. или вы хотите преобразовать их в массив строк? @Jack23

4. возможно ли преобразовать?

5. что вы имеете в виду под преобразованием? у вас просто не может быть фактического : в массиве, за исключением случаев, когда это строка, но в вашем примере не было строк, означающих, что js выдаст синтаксис, потому что вы не можете иметь : not ; в массиве

Ответ №2:

Вы можете сделать это следующим образом:

 const array1 = [0, 20, 40, 60, 80];
const array2 = ["-97:61:-1008;", "-97:60:-1008;", "-97:73:-1006", "-98:70:-1008"];
const arrayFinal = array1.map((item,index) => `${item}:${array2[index]}`);
  

Комментарии:

1. это даже не будет выполняться, поскольку вы не можете иметь : nor ; в массиве, по сути, весь этот вопрос в корне ошибочен

Ответ №3:

Если вы уверены, что оба массива имеют одинаковую длину, вы можете перебрать первый с помощью map и сделать что-то подобное:

 const arrayFinal = array1.map((item, i) => ({[item]: array2[i]}));
  

Вы получите:

 arrayFinal = [{elem1: elemA}, {elem2: elemB}...]
  

 const array1 = ['item1', 'item2', 'item3'];
const array2 = [1, 2, 3];

const arrayFinal = array1.map((item, i) => ({[item]: array2[i]}));

console.log(arrayFinal);  

Комментарии:

1. это также неверно с тем, что хотел OP, из-за его странного объяснения того, что он хотел, но если вы посмотрите на мой ответ здесь, я преобразовал 2 массива в [[elem1, elemb], [elem2, elemb], [elem3, elemc]] и op прокомментировал, что это действительно правильно и то, что он хотел

2. Это было правильно в какой-то момент;p (по крайней мере, с одной интерпретацией странного синтаксиса).

3. Да, я знаю, но я не знал в то время, вызванное странным синтаксисом и многочисленными правками

Ответ №4:

Ваш случай очень близок к следующим служебным функциям:

https://lodash.com/docs/4.17.15#zip
https://ramdajs.com/docs/#zip

Кроме того, это может быть реализовано следующим образом:

 function zip<A, B>(listA: A[], listB: B[]): Array<[A, B]> {
  return listA.map((a, i) => [a, listB[i]]);
}
  

https://www.typescriptlang.org/play ?#code/GYVwdgxgLglg9mABALxgBwDwEEA0iBCAfABQA2MAzlFgFyJYDaAunuVfnfswJR1YBO-AIYBPDA1wEmhRAG8AUIkT8AplBD8kbagDoAtkLTFiQvDG6IAvDIanE2rjCZNuAbnkBfefIgIKcUhUdUjgAc2JUIwYARhwAJhwAZhZEBgAWHABWHAA2FzcgA

Если вам нужен словарь:

 function zipObject<A extends (string | number | symbol), B>(listA: A[], listB: B[]): { [key in A]: B } {
  return Object.assign(
    {},
    ...listA.map((a, i) => ({ [a]: listB[i] })),
  );
}
  

Комментарии:

1. это также не то, что хотел op, он не хотел делать это 2d-массивом, он хотел сделать это dictionairy, где array1 будет ключами, а array2 — значениями этих ключей

2. ОК. извините. Я отредактировал свой ответ. Пожалуйста, взгляните на последний пример. В общем, нет никакой разницы между набором пар ключ / значение и словарем.

3. на самом деле, он имел в виду [[elem1, elema], [elem2, elemb]] (я думаю), что OP действительно сбивает с толку, и его правки только ухудшают ситуацию

4. я реализовал оба случая) наконец, я просто не понимаю, что происходит) просто теряю очки)