Как вставить несколько элементов в один и тот же индекс в многомерном массиве? - PullRequest
5 голосов
/ 09 апреля 2019

У меня есть два массива, которые я пытаюсь объединить в GAS, arr2 является многомерным.

arr1 = ["Diesel", "Solar", "Biomass"]

arr2 = [
        ["ABC", "Nigeria", "Diesel,Solar", 35],
        ["DEF", "Egypt", "Solar,Diesel", 50],
        ["GHI", "Ghana", "Biomass,Diesel", 70]
       ]

Что я хочу сделать, это вставить элементы arr1 в arr2 с индексом 3 в каждой строке, поэтомуэто выглядит так:

newArr = [
          ["ABC", "Nigeria", "Diesel,Solar", "Diesel", 35],
          ["DEF", "Egypt", "Solar,Diesel", "Solar", 50],
          ["GHI", "Ghana", "Biomass,Diesel", "Biomass", 70]
         ]

Я пытался использовать .map поверх arr2 для .Splice каждой строки, но не смог заставить его работать.Любая помощь будет высоко ценится!

Ответы [ 4 ]

3 голосов
/ 09 апреля 2019

Использование array.splice() и array.map()

Синтаксис

array.splice(start[, deleteCount[, item1[, item2[, ...]]]])

let arr1 = ["Diesel", "Solar", "Biomass"]

let arr2 = [
  ["ABC", "Nigeria", "Diesel,Solar", 35],
  ["DEF", "Egypt", "Solar,Diesel", 50],
  ["GHI", "Ghana", "Biomass,Diesel", 70]
]

let newArr = arr2.map((v, i) => v.splice(3, 0, arr1[i]) && v)

console.log(newArr)
3 голосов
/ 09 апреля 2019

Вы можете использовать методы Array#map и Array#splice.

let arr1 = ["Diesel", "Solar", "Biomass"],
  arr2 = [
    ["ABC", "Nigeria", "Diesel,Solar", 35],
    ["DEF", "Egypt", "Solar,Diesel", 50],
    ["GHI", "Ghana", "Biomass,Diesel", 70]
  ];

// iterate over the array
let res = arr2.map((arr, i) => {
// copy array values to a new array
  let newA = [...arr];
  // insert new element into array based on index
  newA.splice(3, 0, arr1[i]);
  // return new array
  return newA;
})

console.log(res)

Если вы хотите изменить исходный массив, то можете пропустить часть копирования массива, и достаточно просто метода Array#splice.

let arr1 = ["Diesel", "Solar", "Biomass"],
  arr2 = [
    ["ABC", "Nigeria", "Diesel,Solar", 35],
    ["DEF", "Egypt", "Solar,Diesel", 50],
    ["GHI", "Ghana", "Biomass,Diesel", 70]
  ];

// iterate over the array and put the value at specific index
arr2.forEach((arr, i) => arr.splice(3, 0, arr1[i]))

console.log(arr2)
0 голосов
/ 09 апреля 2019

Попробуйте использовать следующий код

arr1 = ["Diesel", "Solar", "Biomass"]

arr2 = [
        ["ABC", "Nigeria", "Diesel,Solar", 35],
        ["DEF", "Egypt", "Solar,Diesel", 50],
        ["GHI", "Ghana", "Biomass,Diesel", 70]
       ]
arr2.forEach((subArr, index) => {console.log(subArr.splice(3, 0, arr1[index]));});
console.log(arr2);
0 голосов
/ 09 апреля 2019

С forEach. Используйте map, если вы не хотите изменять массив.

const arr1 = ['Diesel', 'Solar', 'Biomass'];

const arr2 = [
  ['ABC', 'Nigeria', 'Diesel,Solar', 35],
  ['DEF', 'Egypt', 'Solar,Diesel', 50],
  ['GHI', 'Ghana', 'Biomass,Diesel', 70]
];

arr2.forEach((el, i) => {
  el.splice(3, 0, arr1[i]);
});

console.log(arr2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...