LenovoId
@LenovoId
svg, css,js

Как из двух разных видов массива получить один?

Имеются два исходных массива

let mass1 = ["zn1", "zn2", "zn3"];

let mass2 = [
  {t1: "aa", p1: "lot"},
  {t1: "ab", p1: "kot"},
  {t1: "ac", p1: "mot"}
]


Каким способом из них получить вот такой ?

let mass3 = [
  {head: "zn1", t1: "aa", p1: "lot"},
  {head: "zn2", t1: "ab", p1: "kot"},
  {head: "zn3", t1: "ac", p1: "mot"},
]


С такими задачами раньше не встречался, если не сложно научите это делать
  • Вопрос задан
  • 126 просмотров
Решения вопроса 3
@Wispik
Если массивы одинаковой длины, то можно просто через цикл
let mass1 = ["zn1", "zn2", "zn3"]
let mass2 = [
  {t1: "aa", p1: "lot"},
  {t1: "ab", p1: "kot"},
  {t1: "ac", p1: "mot"}
]

let mass3 = []

for (let i = 0; i < mass1.length; i++) {
    mass3.push(
        Object.assign(mass2[i], {head: mass1[i]})
    )
}
Ответ написан
sergiks
@sergiks Куратор тега JavaScript
♬♬
Вариант с reduce() в копилку:
const zip = (arr1, arr2) => arr1.reduce(
  (acc, head, i) => (acc.push({ ...arr2[i], head }), acc),
  []
);

Использование:
zip(mass1, mass2) 
/* [
  { t1: "aa", p1: "lot", head: "zn1" },
  { t1: "ab", p1: "kot", head: "zn2" },
  { t1: "ac", p1: "mot", head: "zn3" },
] */

Конечно, map() тут больше подходит:
mass1.map((head, i) => ({ head, ...mass2[i] }))
Ответ написан
@Jet-Fire
є декілька варіантів, сучасний це через спред оператор
const arr1 = [1,2,3];
const arr2 = [4,5,6];
const arr3 = [...arr1, ...arr2];

є більш старенький, але теж крутий
const arr4 = arr1.concat(arr2);

є ще крутий спосіб з reduce але в даному випадку він складний

в вашому випадку треба
let mass1 = ["zn1", "zn2", "zn3"];
let mass2 = [
{t1: "aa", p1: "lot"},
{t1: "ab", p1: "kot"},
{t1: "ac", p1: "mot"}
];

const newArr = mass2.map((item, idx) => {
return {...item, head: mass1[idx]}
})
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы