How to easily truncate an array with JavaScript?

JavascriptArrays

Javascript Problem Overview


Linq has a convenient operator method called Take() to return a given number of elements in anything that implements IEnumerable. Is there anything similar in jQuery for working with arrays?

Or, asked differently: how can I truncate an array in Javascript?

Javascript Solutions


Solution 1 - Javascript

There is a slice method

let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
arr = arr.slice(0, 4);
console.log(arr);

Will return the first four elements.

Don't forget to assign it back to your variable if you want to discard the other values.

Note: This is just regular javascript, no need for jquery.

Solution 2 - Javascript

(2 years later...) If you're truly looking to truncate an array, you can also use the length attribute:

var stooges = ["Moe", "Larry", "Shemp", "Curly", "Joe"];
stooges.length = 3; // now stooges is ["Moe", "Larry", "Shemp"]

Note: if you assign a length which is longer than current length, undefined array elements are introduced, as shown below.

var stooges = ["Moe", "Larry", "Shemp"];
stooges.length = 5;
alert(typeof stooges[4]); // alerts "undefined"

EDIT:

As @twhitehead mentioned below, the addition of undefined elements can be avoided by doing this:

var stooges = ["Moe", "Larry", "Shemp"];
stooges.length = Math.min(stooges.length, 5); 
alert(stooges.length)// alerts "3"

Solution 3 - Javascript

If you're asking how to truncate (modify an array by removing the elements from the end) then use splice:

var a1 = [2,4,6,8];
var a2 = a1.splice(-2,2); // a1=[2,4], a2=[6,8]

If you're asking how to retrieve a subset of an array without modifying the original, then use slice.

var a1 = [2,4,6,8];
var a2 = a1.slice(-2); // a1=[2,4,6,8], a2=[6,8]

Just remember splice modifies, slice accesses. Negative numbers as first arg indicate index from the end of the array.

Solution 4 - Javascript

Set .length property to a lower value.

Official documentation: Array.prototype.length

Solution 5 - Javascript

If you want to both get the elements as well as remove them from the array, use splice.

If you want to keep the elements in the array, use slice

Solution 6 - Javascript

If you want to selectively pull elements out of an array, you can use the jQuery.grep method.

(from the jQuery docs)

var arr = [ 1, 9, 3, 8, 6, 1, 5, 9, 4, 7, 3, 8, 6, 9, 1 ];

$("div").text(arr.join(", "));

arr = jQuery.grep(arr, function(n, i){
  return (n != 5 && i > 4);
});

$("p").text(arr.join(", "));

arr = jQuery.grep(arr, function (a) { return a != 9; });
$("span").text(arr.join(", "));

Solution 7 - Javascript

If you are using a take(3), I'm going to assume the array is originally being defined as the argument 3

const result = new Array(3) 
// result = [undefined , undefined , undefined]

If you iterator only returns 2 values, or the values are filtered after the take(3) command and 1 of your values is removed the array would look like

//result = [1 , 1 , undefined]

so to truncate the array of empty elements you can use

 result.filter((value) => value !== undefined);

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAlan LeView Question on Stackoverflow
Solution 1 - JavascriptBobView Answer on Stackoverflow
Solution 2 - JavascriptJonathan MView Answer on Stackoverflow
Solution 3 - JavascriptChadwickView Answer on Stackoverflow
Solution 4 - JavascriptG. GhezView Answer on Stackoverflow
Solution 5 - JavascriptPatrikAkerstrandView Answer on Stackoverflow
Solution 6 - JavascriptScottKoonView Answer on Stackoverflow
Solution 7 - JavascriptRexView Answer on Stackoverflow