How to insert an item into an array at a specific index (JavaScript)?

后端 未结 20 2119
灰色年华
灰色年华 2020-11-21 07:05

I am looking for a JavaScript array insert method, in the style of:

arr.insert(index, item)

Preferably in jQuery, but any JavaScript implem

相关标签:
20条回答
  • 2020-11-21 07:48

    I tried this and it is working fine!

    var initialArr = ["India","China","Japan","USA"];
    initialArr.splice(index, 0, item);
    

    Index is the position where you want to insert or delete the element. 0 i.e. the second parameters defines the number of element from the index to be removed item are the new entries which you want to make in array. It can be one or more than one.

    initialArr.splice(2, 0, "Nigeria");
    initialArr.splice(2, 0, "Australia","UK");
    
    0 讨论(0)
  • 2020-11-21 07:50

    If you want to insert multiple elements into an array at once check out this Stack Overflow answer: A better way to splice an array into an array in javascript

    Also here are some functions to illustrate both examples:

    function insertAt(array, index) {
        var arrayToInsert = Array.prototype.splice.apply(arguments, [2]);
        return insertArrayAt(array, index, arrayToInsert);
    }
    
    function insertArrayAt(array, index, arrayToInsert) {
        Array.prototype.splice.apply(array, [index, 0].concat(arrayToInsert));
        return array;
    }
    

    Finally here is a jsFiddle so you can see it for youself: http://jsfiddle.net/luisperezphd/Wc8aS/

    And this is how you use the functions:

    // if you want to insert specific values whether constants or variables:
    insertAt(arr, 1, "x", "y", "z");
    
    // OR if you have an array:
    var arrToInsert = ["x", "y", "z"];
    insertArrayAt(arr, 1, arrToInsert);
    
    0 讨论(0)
  • 2020-11-21 07:52

    Array#splice() is the way to go, unless you really want to avoid mutating the array. Given 2 arrays arr1 and arr2, here's how you would insert the contents of arr2 into arr1 after the first element:

    const arr1 = ['a', 'd', 'e'];
    const arr2 = ['b', 'c'];
    
    arr1.splice(1, 0, ...arr2); // arr1 now contains ['a', 'b', 'c', 'd', 'e']
    
    console.log(arr1)

    If you are concerned about mutating the array (for example, if using Immutable.js), you can instead use slice(), not to be confused with splice() with a 'p'.

    const arr3 = [...arr1.slice(0, 1), ...arr2, ...arr1.slice(1)];
    
    0 讨论(0)
  • 2020-11-21 07:52

    Immutable insertion

    Using splice method is surely the best answer if you need to insert into an array in-place.

    However, if you are looking for an immutable function that returns a new updated array instead of mutating the original array on insert, you can use the following function.

    function insert(array, index) {
      const items = Array.prototype.slice.call(arguments, 2);
    
      return [].concat(array.slice(0, index), items, array.slice(index));
    }
    
    const list = ['one', 'two', 'three'];
    
    const list1 = insert(list, 0, 'zero'); // Insert single item
    const list2 = insert(list, 3, 'four', 'five', 'six'); // Insert multiple
    
    
    console.log('Original list: ', list);
    console.log('Inserted list1: ', list1);
    console.log('Inserted list2: ', list2);

    Note: This is a pre-ES2015 way of doing it so it works for both older and newer browsers.

    If you're using ES6 then you can try out rest parameters too; see this answer.

    0 讨论(0)
  • 2020-11-21 07:53

    Anyone who's still having issues with this one and have tried all the options above and never got it. I'm sharing my solution, this is to take consideration that you don't wan't to explicitly state the properties of your object vs the array.

    function isIdentical(left, right){
        return JSON.stringify(left) === JSON.stringify(right);
    }
    
    function contains(array, obj){
        let count = 0;
        array.map((cur) => {
              if(this.isIdentical(cur, obj)) count++;
        });
        return count > 0;
    }
    

    This is a combination of iterating the reference array and comparing it to the object you wanted to check, convert both of them into a string then iterated if it matched. Then you can just count. This can be improved but this is where I settled. Hope this helps.

    0 讨论(0)
  • 2020-11-21 07:54

    i like little safety and i use this

       Array.prototype.Insert = function (item, before) {
            if (!item) return;
            if (before == null || before < 0 || before > this.length - 1) {
                this.push(item);
                return;
            }
            this.splice(before, 0,item );
        }
        
        
       var t = ["a","b"]
       
       t.Insert("v",1)
        
        console.log(t )

    0 讨论(0)
提交回复
热议问题