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