Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to insert multiple elements into the same index in a multidimensional array?

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!

like image 800
Ajay Ubhi Avatar asked Apr 09 '19 12:04

Ajay Ubhi


2 Answers

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)
like image 84
User863 Avatar answered Nov 04 '22 00:11

User863


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)
like image 41
Pranav C Balan Avatar answered Nov 04 '22 02:11

Pranav C Balan