Split array into two arrays

JavascriptJquery

Javascript Problem Overview


var arr = ['a', 'b', 'c', 'd', 'e', 'f'];
var point = 'c';

How can I split the "arr" into two arrays based on the "point" variable, like:

['a', 'b']

and

['d', 'e', 'f']

Javascript Solutions


Solution 1 - Javascript

var arr2 = ['a', 'b', 'c', 'd', 'e', 'f'];
arr = arr2.splice(0, arr2.indexOf('c'));

To remove 'c' from arr2:

arr2.splice(0,1);

arr contains the first two elements and arr2 contains the last three.

This makes some assumptions (like arr2 will always contain the 'point' at first assignment), so add some correctness checking for border cases as necessary.

Solution 2 - Javascript

Use indexOf and slice

var arr = ['a', 'b', 'c', 'd', 'e', 'f'];

var indexToSplit = arr.indexOf('c');
var first = arr.slice(0, indexToSplit);
var second = arr.slice(indexToSplit + 1);

console.log({first, second});

Solution 3 - Javascript

Sharing this convenience function that I ended up making after visiting this page.

function chunkArray(arr,n){
     var chunkLength = Math.max(arr.length/n ,1);
     var chunks = [];
     for (var i = 0; i < n; i++) {
	     if(chunkLength*(i+1)<=arr.length)chunks.push(arr.slice(chunkLength*i, chunkLength*(i+1)));
     }
     return chunks; 
 }

Sample usage:

chunkArray([1,2,3,4,5,6],2);
//returns [[1,2,3],[4,5,6]]

chunkArray([1,2,3,4,5,6,7],2);
//returns [[1,2,3],[4,5,6,7]]

chunkArray([1,2,3,4,5,6],3);
//returns [[1,2],[3,4],[5,6]]

chunkArray([1,2,3,4,5,6,7,8],3);
//returns [[1,2],[3,4,5],[6,7,8]]

chunkArray([1,2,3,4,5,6,7,8],42);//over chunk
//returns [[1],[2],[3],[4],[5],[6],[7],[8]]

Solution 4 - Javascript

Try this one:

var arr = ['a', 'b', 'c', 'd', 'e', 'f'];
var point = 'c';

var idx = arr.indexOf(point);

arr.slice(0, idx) // ["a", "b"]
arr.slice(idx + 1) // ["d", "e", "f"]

Solution 5 - Javascript

var arr = ['a', 'b', 'c', 'd', 'e', 'f'];
var point = 'c';
Array.prototype.exists = function(search){
    for (var i=0; i<this.length; i++) {
        if (this[i] == search) return i;
    }
    return false;
} 

if(i=arr.exists(point))
{
    var neewArr=arr.splice(i);
    neewArr.shift(0);

    console.log(arr); // output: ["a", "b"]
    console.log(neewArr); // output: ["d", "e", "f"] 
}ā€‹

Here is an example.

Solution 6 - Javascript

var arr = ['a', 'b', 'c', 'd', 'e', 'f'];
var point = 'c';
var i = arr.indexOf(point);
var firstHalf, secondHalf, end, start;

if (i>0) {
  firstHalf = arr.slice(0, i);
  secondHalf = arr.slice(i + 1, arr.length);    
}

//this should get you started. Can you think of what edge cases you should test for to fix? //what happens when point is at the start or the end of the array?

Solution 7 - Javascript

When splitting the array you are going to want to create two new arrays that will include what you are splitting, for example arr1 and arr2. To populate this arrays you are going to want to do something like this:

var arr1, arr2; // new arrays
int position = 0; // start position of second array
   for(int i = 0; i <= arr.length(); i++){
       if(arr[i] = point){ //when it finds the variable it stops adding to first array
           //starts adding to second array
            for(int j = i+1; j <= arr.length; j++){
               arr2[position] = arr[j];
               position++; //because we want to add from beginning of array i used this variable
            }
       break;
       }
      // add to first array
       else{
           arr1[i] = arr[i];
       }
}

There are different ways to do this! good luck!

Solution 8 - Javascript

Yet another suggestion:

var segments = arr.join( '' ).split( point ).map(function( part ) {
    return part.split( '' );
});

now segments contains an array of arrays:

[["a", "b"], ["d", "e", "f"]]

and can get accessed like

segments[ 0 ]; // ["a", "b"]
segments[ 1 ]; // ["d", "e", "f"]

Solution 9 - Javascript

if you want to split into equal half; why no simple while loop ?

var arr = ['a', 'b', 'c', 'd', 'e', 'f'];
var c=[];
while(arr.length > c.length){
 c.push(arr.splice(arr.length-1)[0]);
}

Kaboom :).

Solution 10 - Javascript

Separate two arrays with given array elements as string array and number array;
let arr = [21,'hh',33,'kk',55,66,8898,'rtrt'];


arrStrNum = (arr) => {
    let str = [],num = [];

    for(let i = 0;i<arr.length;i++){
	    if(typeof arr[i] == "string"){
		    str.push(arr[i]);
	    }else if(typeof arr[i] == "number"){
		    num.push(arr[i]);
	    }
    }
    return [str, num]
    }

let ans = arrStrNum(arr);
let str = ans[0];
let num = ans[1];
console.log(str);
console.log(num);

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionellabeautyView Question on Stackoverflow
Solution 1 - JavascriptramblinjanView Answer on Stackoverflow
Solution 2 - JavascriptJuan MendesView Answer on Stackoverflow
Solution 3 - JavascriptJulien AltieriView Answer on Stackoverflow
Solution 4 - JavascriptSergio TulentsevView Answer on Stackoverflow
Solution 5 - JavascriptThe AlphaView Answer on Stackoverflow
Solution 6 - JavascriptAnony372View Answer on Stackoverflow
Solution 7 - Javascriptpaul590View Answer on Stackoverflow
Solution 8 - JavascriptjAndyView Answer on Stackoverflow
Solution 9 - JavascriptZalabozaView Answer on Stackoverflow
Solution 10 - JavascriptSam FeniltoView Answer on Stackoverflow