Reputation: 3264
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
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
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
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