2011-09-24 30 views

Trả lời

271

Hãy xem Array.slice()

var ar = [1, 2, 3, 4, 5]; 
var ar2 = ar.slice(1, 1 + 3); 

print(ar2) 
>>2,3,4 
16

hồi vì mục đích đơn giản của lát, sử dụng phần mở rộng của tôi để Mảng Class:

Array.prototype.subarray=function(start,end){ 
    if(!end){ end=-1;} 
    return this.slice(start, this.length+1-(end*-1)); 
} 

Sau đó:

var bigArr=["a", "b", "c", "fd", "ze"] 

Test1:

bigArr.subarray(1,-1) 

< [ "b", "c", "fd", "ze"]

Test2:

bigArr.subarray(2,-2) 

< [ "c", "fd"]

Test3:

bigArr.subarray(2) 

< [ "c", "fd", "ze"]

Có thể dễ dàng hơn cho các nhà phát triển đến từ ngôn ngữ khác (.ie: Groovy)

2

Các câu hỏi thực sự là yêu cầu cho một mới mảng, vì vậy tôi tin rằng một giải pháp tốt hơn là nên kết hợp Abdennour TOUMI's answer với một chức năng nhân bản:

function clone(obj) { 
    if (null == obj || "object" != typeof obj) return obj; 
    var copy = obj.constructor(); 
    for (var attr in obj) { 
     if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr]; 
    } 
    return copy; 
} 
[http://stackoverflow.com/questions/728360/most-elegant-way-to-clone-a-javascript-object] 

với clone() chức năng, bây giờ bạn có thể làm như sau:

Array.prototype.subarray=function(start, end) { 
    if(!end){ 
     end = this.length; 
    } 
    var newArray = clone(this); 
    return newArray.slice(start, end); 
}; 

Nếu không có bản sao, bạn sẽ mất mảng ban đầu của mình.

Ví dụ:

var array = [1,2,3,4,5]; 
console.log(array.subarray(2)); //print the subarray [3, 4, 5, subarray: function] 

console.log(array); //print the original array [1, 2, 3, 4, 5, subarray: function] 
+8

Tôi không nghĩ rằng slice sẽ thay đổi mảng ban đầu. – Mani

+6

'Array.prototype.slice' trả về một bản sao rồi. 'Array.prototype.splice' sửa đổi mảng ban đầu. –

+1

Phương thức slice() trả về một bản sao nông của một phần của một mảng thành một đối tượng mảng mới. Xem [Mạng nhà phát triển Mozilla] (https://developer.mozilla.org/en-S/docs/Web/JavaScript/Reference/Global_Objects/Array/slice). Đã bỏ phiếu. – TheCrazyProgrammer

4
var array_one = [11, 22, 33, 44,55]; 
var ar2 = ar.slice(1, array_one.length-1); 
console.log(array_2) 
Các vấn đề liên quan