#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]]);
}
Если вам нужен словарь:
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. я реализовал оба случая) наконец, я просто не понимаю, что происходит) просто теряю очки)