Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Javascript (dynamic) insert into array, then shift all elements underneath +1

Didn't really found a solution to this for Javascript. What I need; I want to insert an element into an array, but not really overwrite that element. Rather a 'dynamic' insert. Thus Insert element, then shift all elements underneath it by +1 index.

For instance:

I have an array "14S" "16S" "19S".
I know want to insert "15S".
The resulting array: "14S" "15S" "16S" "19S"

What i tried:

  fullName = "15S"
  low = 5;
  cardsS[low] = fullName;
  for (var i = low; i < cardsS.length; i++) {
      cardsS[i + 1] = cardsS[i];
  }
like image 395
Faarbhurtz Avatar asked Dec 09 '13 10:12

Faarbhurtz


People also ask

How do you add to the middle of an array?

Adding Elements to the MiddleThe splice() function also lets you add elements to the middle of the array. JavaScript arrays have a push() function that lets you add elements to the end of the array, and an unshift() function that lets you add elements to the beginning of the array.

How do you push an element in the first position of an array?

Adding new elements at the beginning of existing array can be done by using Array unshift() method. This method is similar to push() method but it adds element at the beginning of the array.

How do you change the index of an element in an array?

To change the position of an element in an array:Use the splice() method to insert the element at the new index in the array. The splice method changes the original array by removing or replacing existing elements, or adding new elements at a specific index.


2 Answers

If you know the position you want to insert the element into:

Use the splice method. It's cheap and works exactly like you want. You can also insert multiple elements at once:

var strings = ["14S", "16S", "19S"];
strings.splice(1,0,"15S");

Result

"14S" "15S" "16S" "19S"

You should also use this solution if you don't want the array to be sorted in a specific way.

If you don't know the position you want to insert the element into:

You will have to resort to a push/sort combination, supplying your own sort algorithm (unless the standard sort is enough)

var strings = ["14S", "16S", "19S"];
strings.push("15S");
strings.sort(function(a, b){
    if (a is less than b by some ordering criterion)
        return -1;
    if (a is greater than b by the ordering criterion)
        return 1;
    // a must be equal to b
    return 0;
});
like image 143
Breno Gazzola Avatar answered Sep 30 '22 19:09

Breno Gazzola


You can use Array.splice to insert a value:

var arr = ["14S","16S","19S"];
arr.splice(1,0,"15S");
//         ^position after which to insert
//            ^number of elements to delete (none here)
//              ^value to insert ("15S" here)
// => arr is now ["14S","15S","16S","19S"]

If you don't know the position, you could use Array.indexOf to determine it:

var arr = ["14S","16S","19S"];
arr.splice((arr.indexOf('14S')>-1 && arr.indexOf(after)+1 || 0),0,"15S");
//         ^use indexOf result if applicable or just insert 
//          (so, if no position, this turns into unshift ;)

You can create a method for it:

function arrayInsertAfter(array, after, value){
  after = array.indexOf(after)>-1 && array.indexOf('14S')+1 || 0;
  array.splice(after, 0, value);
  return array;
}
// usage
var arr = arrayInsertAfter(["14S","16S","19S"],"14S","15S");
// => ["14S","15S","16S","19S"]

MDN link for Array.splice

like image 24
KooiInc Avatar answered Sep 30 '22 19:09

KooiInc