Split array into two arrays

前端 未结 9 927
甜味超标
甜味超标 2020-12-24 10:24
var arr = [\'a\', \'b\', \'c\', \'d\', \'e\', \'f\'];
var point = \'c\';

How can I split the \"arr\" into two arrays based on the \"point\" variabl

相关标签:
9条回答
  • 2020-12-24 11:08
    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?

    0 讨论(0)
  • 2020-12-24 11:08

    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"]
    
    0 讨论(0)
  • 2020-12-24 11:09

    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 :).

    0 讨论(0)
  • 2020-12-24 11:15
    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.

    0 讨论(0)
  • 2020-12-24 11:20

    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]]
    
    0 讨论(0)
  • 2020-12-24 11:21

    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});

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