Подтвердить что ты не робот

Разделить массив на два массива

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

Как я могу разделить "arr" на два массива на основе "точечной" переменной, например:

['a', 'b']

и

['d', 'e', 'f']
4b9b3361

Ответ 1

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

Чтобы удалить 'c' из arr2:

arr2.splice(0,1);

arr содержит первые два элемента, а arr2 содержит последние три.

Это делает некоторые предположения (например, arr2 всегда будет содержать "точку" при первом присваивании), поэтому при необходимости добавьте некоторую проверку правильности для пограничных случаев.

Ответ 2

Используйте indexOf и slice

http://jsfiddle.net/mendesjuan/8VtBk/

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

indexOf недоступен в каждом браузере, , но в приведенной выше ссылке есть что-то, что можно использовать вместо, вы можете использовать фрагмент, например следующий

if (!Array.indexOf) {
  Array.prototype.indexOf = function (obj, start) {
    for (var i = (start || 0); i < this.length; i++) {
      if (this[i] == obj) {
        return i;
      }
    }
    return -1;
  }
}

Ответ 3

Попробуйте следующее:

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

Ответ 4

Разделите эту функцию удобства, которую я закончил после посещения этой страницы.

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

Использование образца:

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

Ответ 5

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"] 
}​

Вот пример .

Ответ 6

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

//это должно вас начать. Можете ли вы придумать, какие крайние случаи вы должны проверить, чтобы исправить? // что происходит, когда точка находится в начале или в конце массива?

Ответ 7

При разбиении массива вам захочется создать два новых массива, которые будут включать в себя то, что вы раскалываете, например arr1 и arr2. Чтобы заполнить эти массивы, вы захотите сделать что-то вроде этого:

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

Существуют разные способы сделать это! удачи!

Ответ 8

Еще одно предложение:

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

теперь segments содержит массив массивов:

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

и можно получить доступ, например

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