Ramon Marques
Ramon Marques

Reputation: 3264

How to iterate a list reversely and stop with a condition with lodash?

I have a list with some items for example

["a", "b", "c", ..., "x", "y", "z"]

I would like to iterate it but from the end to beggining and push those items into a new variable, and stop when it has length == 3.

For that simple example I would like to have as result within my new var:

["z", "y", "x"]

I'm thinking of .reverse() my array and then iterate it with .each and push my items, but I believe there is a better way to do that with lodash, that I'm not finding.

Maybe I'm not knowing how to search.

Thanks in advance.

Upvotes: 0

Views: 113

Answers (3)

Nina Scholz
Nina Scholz

Reputation: 386654

In plain Javascript you could use Array#slice with a negative count for getting a new array from the end and use Array#reverse for a reversed array.

var array = ["a", "b", "c", "x", "y", "z"],
    result = array.slice(-3).reverse();
    
console.log(result);

For processing items, you could use Array#reduceRight.

var array = ["a", "b", "c", "x", "y", "z"],
    result = array.slice(-3).reduceRight((r, a) => r.concat(a), []);
    
console.log(result);

Upvotes: 2

MaxZoom
MaxZoom

Reputation: 7753

Another solution that iterates the original array:

var arr = ["a", "b", "c", "x", "y", "z"], res=[], count=3;
if (count <= arr.length)
  for (var i=0; i<count; i++) res.push(arr[arr.length-1-i]);

console.log(res);

Upvotes: 1

Carlos Franco
Carlos Franco

Reputation: 210

You can do it with the function "_.takeRightWhile" from lodash like the code below:

var arr = ["a", "b", "c", "x", "y", "z"];
var reverseArray = [];
_.takeRightWhile(arr, function(item){
    reverseArray.push(item)
    return reverseArray.length < 3
});

console.log(reverseArray);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

Upvotes: 2

Related Questions