6

I have two arrays that I am trying to combine in GAS, arr2 is multidimensional.

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

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

What I want to do is push the elements of arr1 into arr2 at index 3 in each row, so it looks like:

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

I have tried to use .map over arr2 to .Splice each row but couldn't get it to work. Any help would be much appreciated!

Ajay Ubhi
  • 329
  • 2
  • 4
  • 12
  • 3
    Possible duplicate of [How to insert an item into an array at a specific index (JavaScript)?](https://stackoverflow.com/questions/586182/how-to-insert-an-item-into-an-array-at-a-specific-index-javascript) – messerbill Apr 09 '19 at 12:06
  • What did you try? Please share your code @Ajay – Niraj Kaushal Apr 09 '19 at 12:08
  • So I did try the .Splice method in the thread above. However, I was having trouble understanding how to do it in a multidimensional array. – Ajay Ubhi Apr 09 '19 at 12:15

4 Answers4

4

You can use Array#map and Array#splice methods.

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)

If you want to mutate original array then you can skip the array copying portion and just Array#splice method is enough.

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)
Pranav C Balan
  • 113,687
  • 23
  • 165
  • 188
4

Using array.splice() and array.map()

Syntax

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)
User863
  • 19,346
  • 2
  • 17
  • 41
0

With a forEach. Use map if you don't want to mutate the array.

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);
adiga
  • 34,372
  • 9
  • 61
  • 83
Andy
  • 61,948
  • 13
  • 68
  • 95
0

Try using the following code

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);
Rahul Malu
  • 556
  • 2
  • 9