103

Is there an equivalent for ruby's array[n..m] in JavaScript?

For example:

>> a = ['a','b','c','d','e','f','g']
>> a[0..2]
=> ['a','b','c']
A-Sharabiani
  • 17,750
  • 17
  • 113
  • 128
shdev
  • 1,855
  • 4
  • 17
  • 18
  • 3
    yes, coffeescript! [New-and-improved range, slice, splice and loop syntax](https://github.com/jashkenas/coffee-script/issues/835). – Lance May 18 '11 at 23:02

4 Answers4

179

Use the array.slice(begin [, end]) function.

var a = ['a','b','c','d','e','f','g'];
var sliced = a.slice(0, 3); //will contain ['a', 'b', 'c']

The last index is non-inclusive; to mimic ruby's behavior you have to increment the end value. So I guess slice behaves more like a[m...n] in ruby.

Nicholas Hamilton
  • 10,044
  • 6
  • 57
  • 88
Vivin Paliath
  • 94,126
  • 40
  • 223
  • 295
22

The second argument in slice is optional, too:

var fruits = ['apple','banana','peach','plum','pear'];
var slice1 = fruits.slice(1, 3);  //banana, peach
var slice2 = fruits.slice(3);  //plum, pear

You can also pass a negative number, which selects from the end of the array:

var slice3 = fruits.slice(-3);  //peach, plum, pear

Here's the W3 Schools reference link.

David Hoerster
  • 28,421
  • 8
  • 67
  • 102
  • 7
    How about linking to Mozilla's javascript reference, which is far more informative and much better written than the W3 schools site (which has nothing to do with the W3C)? https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/slice – Bobby Jack Aug 26 '10 at 23:50
10

a.slice(0, 3) Would be the equivalent of your function in your example.

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/slice

Robert
  • 21,110
  • 9
  • 55
  • 65
  • 1
    actually it would be `a.slice(0, 3)`. slice in JavaScript doesn't included the end index. – Anurag Aug 26 '10 at 23:15
4

Ruby and Javascript both have a slice method, but watch out that the second argument to slice in Ruby is the length, but in JavaScript it is the index of the last element:

var shortArray = array.slice(start, end);
Douglas
  • 36,802
  • 9
  • 76
  • 89