316 votes

Comment obtenir un sous-tableau à partir d'un tableau?

J'ai var ar = [1, 2, 3, 4, 5] et je veux une fonction getSubarray(array, fromIndex, toIndex) , le résultat de l'appel getSubarray(ar, 1, 3) est un nouveau tableau [2, 3, 4] .

493voto

Alex K. Points 67805

Regardez Array.slice()

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

print(ar2)
>>2,3,4
 

18voto

pour une utilisation simple de slice, utilisez mon extension to Array Class:

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

Ensuite :

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

0voto

user73362 Points 28

La question est en fait de demander un nouveau tableau , alors je pense qu'une meilleure solution serait de combiner عبد النور التومي answer avec une fonction de clonage:

 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]
 

Pour que

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

Sans copie, vous perdrez votre tableau d'origine.

Exemple:

 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]
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X