2012-03-29 39 views
23
var arr = ['a', 'b', 'c', 'd', 'e', 'f']; 
var point = 'c'; 

Làm thế nào tôi có thể chia nhỏ các "arr" vào hai mảng dựa trên biến "điểm", như:mảng Chia thành hai mảng

['a', 'b'] 

['d', 'e', 'f'] 
+0

tốt tôi đã làm với hai lần lặp và một vài biến tạm thời, nhưng tôi đã hy vọng có một cách nhanh hơn và với mã ít ... – ellabeauty

+0

sẽ các mảng luôn được sáng tác của chuỗi ký tự đơn? – paislee

+0

Tôi đề nghị bạn viết một hàm tách một mảng dựa trên biến "điểm". –

Trả lời

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

Để xóa 'c' khỏi arr2:

arr2.splice(0,1); 

arr chứa hai phần tử đầu tiên và arr2 chứa ba phần tử cuối cùng.

Điều này làm cho một số giả định (như arr2 sẽ luôn chứa 'điểm' ở lần gán đầu tiên), vì vậy hãy thêm một số kiểm tra tính chính xác cho các trường hợp biên giới nếu cần.

+0

Thực ra phải là 'arr2.indexOf ('c') + 1'. – Jon

+0

Đã sửa lỗi ... cho trường hợp cụ thể này, ít nhất. – ramblinjan

10

Sử dụng indexOfslice

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

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

indexOf không có sẵn trong tất cả các trình duyệt, nhưng liên kết ở trên có một cái gì đó mà có thể được sử dụng thay bạn có thể sử dụng một đoạn như sau

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

Hãy thử cái này:

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

Tuy nhiên, một gợi ý:

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

tại segments chứa một mảng của mảng:

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

và có thể được truy cập như

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

Điều này sẽ thất bại nếu mảng chứa một cái gì đó như 'abc' –

+0

@JuanMendes: không thực sự. Tại sao bạn nghĩ rằng? – jAndy

+0

http://jsfiddle.net/mendesjuan/vjZsB/ –

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

// điều này sẽ giúp bạn bắt đầu. Bạn có thể nghĩ về những trường hợp cạnh bạn nên kiểm tra để sửa chữa? // điều gì xảy ra khi điểm bắt đầu hoặc kết thúc của mảng?

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

Đây là example.

+1

Hàm 'exist' của bạn đã tồn tại, nó được gọi là' indexOf'. –

1

Khi tách mảng bạn sẽ muốn tạo hai mảng mới sẽ bao gồm những gì bạn đang tách, ví dụ arr1 và arr2. Để điền các mảng này, bạn sẽ muốn thực hiện một việc như sau:

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

Có nhiều cách khác nhau để thực hiện việc này! chúc may mắn!

3

Chia sẻ chức năng tiện lợi này mà tôi đã kết thúc sau khi truy cập trang này.

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

sử dụng mẫu:

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