JavaScript —Поиск в массивах
Сначала преобразуйте массивы в объекты, чтобы избежать слишком большого количества итераций и ускорить код.
Скажем, у нас есть массив с объектами, где каждый объект представляет точку данных на диаграмме. Каждый объект имеет поле «дата», которое представляет собой строку, представляющую дату точки данных, и поле «значение», которое представляет значение некоторой метрики для этой даты.
var series = [ {date: '2017-01-01', value: 23000}, {date: '2017-01-02', value: 22000}, {date: '2017-01-03', value: 21000}, {date: '2017-01-04', value: 20000}, ];
У нас также есть массив строк, представляющих даты, которые мы хотим отобразить на диаграмме.
var dates = ['2017–01–01', '2017–01–02'];
Нас интересуют только те объекты в массиве «серия», у которых есть поле «дата», существующее в массиве «даты».
Решение 1 (самое медленное)
Наиболее распространенным способом было бы перебирать массив дат, а для каждой даты перебирать массив серий. Этот метод не так эффективен, так как мы делаем излишне много итераций.
for (var i = 0; i < dates.length; i++) { for (var n = 0; n < series.length; n++) { if(dates[i] === series[n].date){ console.log("Value " + series[n].value); } } }
Решение 2 (быстрее)
Преобразовав наш массив серий в объект, нам нужно выполнить итерацию только один раз, после чего мы можем просто получить значения, как обычные свойства.
var seriesObj = {}; for (var i = 0; i < series.length; i++) { var s = series[i]; seriesObj[s.date] = s.value; } for (var i = 0; i < dates.length; i++) { console.log(" Value " + seriesObj[dates[i]]); }
Нашли это полезным? Не забудьте подписаться на меня в twitter.
БТД
1CGu9Ctt1AuyXiWMJ2nEDoH1RRAKtStdjx
Эфириум
0xd2291b554075da7f61210db2648a7f0a2d006190