I got asked last week about getting the index of an object in an array which had the earliest date, so that this array:
let objArr = [ { "date": "2011-08-12T20:17:46.384Z" }, { "date": "2012-08-12T20:17:46.384Z" }, { "date": "2013-08-12T20:17:46.384Z" }, { "date": "2014-08-12T20:17:46.384Z" }, { "date": "2010-08-12T20:17:46.384Z" }, { "date": "2009-08-12T20:17:46.384Z" } ];
Produces 5 as that element has the earliest day.
I pondered using map but then decided to go all old school and used a for loop like this:
let boringParse = i => parseInt(moment.utc(i.date).format("x"), 10); let forLoopInt = objA => { let min, i, objALength = objA.length; for (let y = 0; y < objALength; y++) { let now = boringParse(objA[y]) if (!min || now < min) { min = now, i = y; } } return i; };
Once I got back to my desk I decided to talk it over with James and came up with this:
let boringParse = i => parseInt(moment.utc(i.date).format("x"), 10); let mapOne = objA => { let datesArr = objA.map(boringParse); return datesArr.indexOf(Math.min(...datesArr)); };
Turns out that the for loop is the faster, but only just!
No comments:
Post a Comment