Thursday, May 23, 2024
 Popular · Latest · Hot · Upcoming
92
rated 0 times [  93] [ 1]  / answers: 1 / hits: 44749  / 10 Years ago, tue, november 25, 2014, 12:00:00

I have an array, and I want to filter it to only include items which match a certain condition. Can this be done in JavaScript?



Some examples:



[1, 2, 3, 4, 5, 6, 7, 8] // I only want [2, 4, 6, 8], i.e. the even numbers

[This, is, an, array, with, several, strings, making, up, a, sentence.] // I only want words with 2 or fewer letters: [is, an, up, a]

[true, false, 4, 0, abc, , 0] // Only keep truthy values: [true, 4, abc, 0]

More From » arrays

 Answers
10

For this, you can use the Array#filter() method, introduced in ECMAScript5. It is supported in all browsers, except for IE8 and lower, and ancient versions of Firefox. If, for whatever reason, you need to support those browsers, you can use a polyfill for the method.



filter() takes a function as its first argument. For every item of the array, your function is passed three arguments - the value of the current item, its index in the array, and the array itself. If your function returns true (or a truthy value, e.g. 1, pizza, or 42), that item will be included in the result. Otherwise, it won't. filter() returns a new array - your original array will be left unmodified. That means that you'll need to save the value somewhere, or it'll be lost.



Now, in the examples from the question:





var myNumbersArray = [1, 2, 3, 4, 5, 6, 7, 8];
console.log(myNumbersArray.filter(function(num){
return !(num % 2); // keep numbers divisible by 2
}));
console.log(myNumbersArray); // see - it hasn't changed!

var myStringArray = [This, is, an, array, with, several, strings, making, up, a, sentence.];
console.log(myStringArray.filter(function(str){
return str.length < 3; // keep strings with length < 3
}));
console.log(myStringArray);

var myBoolArray = [true, false, 4, 0, abc, , 0];
console.log(myBoolArray.filter(Boolean));
// wow, look at that trick!
console.log(myBoolArray);





And for completeness, an example that also uses the index and array parameters: Removing duplicates from the array:





var myArray = [1,1,2,3,4,5,6,1,2,8,2,5,2,52,48,123,43,52];
console.log(myArray.filter(function(value, index, array) {
return array.indexOf(value) === index;
}));




[#68704] Saturday, November 22, 2014, 10 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
mickaylag

Total Points: 333
Total Questions: 108
Total Answers: 93

Location: Solomon Islands
Member since Fri, Oct 8, 2021
3 Years ago
;