简体   繁体   English

将数组拆分为两个数组

[英]Split array into two arrays

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: 如何根据“点”变量将“arr”拆分为两个数组,如:

['a', 'b']

and

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

To remove 'c' from arr2: 要从arr2中删除'c':

arr2.splice(0,1);

arr contains the first two elements and arr2 contains the last three. arr包含前两个元素,arr2包含最后三个元素。

This makes some assumptions (like arr2 will always contain the 'point' at first assignment), so add some correctness checking for border cases as necessary. 这做了一些假设(比如arr2在第一次分配时总是包含'point'),因此必要时添加一些正确性检查边界情况。

Use indexOf and slice 使用indexOfslice

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

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]]

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"]
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 . 这是一个例子

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? //当点位于数组的开头或结尾时会发生什么?

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. 拆分数组时,您将要创建两个新数组,其中包括您要拆分的数组,例如arr1和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! 祝好运!

if you want to split into equal half; 如果你想分成相等的一半; why no simple while loop ? 为什么没有简单的while循环?

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

Kaboom :). Kaboom :)。

Yet another suggestion: 还有一个建议:

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

now segments contains an array of arrays: now segments包含一个数组数组:

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

and can get accessed like 并且可以像访问一样访问

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM