Получить все записи массива / карты, которые соответствуют строке - PullRequest
0 голосов
/ 02 мая 2018

Я работаю с двумя массивами, которые коррелируют значения, что означает, что arrayX[1] коррелирует с arrayY[1], а arrayX[2] коррелирует с arrayY[2] и т. Д.

Теперь мне нужно отфильтровать этот массив X, чтобы он соответствовал заданному значению или содержал его, и только отображает фильтрованный массив X и соответствующий массив Y.

Я пытался создать массив / карту с ключом-значением, которое я нашел по этой ссылке Извлечь объект из массива на основе значения атрибута , а затем отфильтруйте с помощью .find, но я не смог получить ожидаемый результат.

что я нашел эту ссылку Извлечение объекта из массива на основе значения атрибута

Когда я вызываю функцию для фильтрации, я передаю значение, например, я передаю строку '2010'

  • Мой массив X имеет:

    (10) [«декабрь 2008», «февраль 2010», «апрель 2010», «июль 2010», «декабрь 2010», «февраль 2011», «апрель 2012», «июль 2013», «март 2014» "," Май 2017 "]

  • Мой массив Y имеет:

    (10) [1, 7, 4, 1, 10, 11, 4, 8, 7, 10]

итак, для выхода мне нужно

arrayX будет ["Feb 2010", "Apr 2010", "Jul 2010", "Dec 2010"] и

arraY будет [7, 4, 1, 10].

Мой машинописный код, который ожидает значение и фильтр:

filtr(dt){
      console.log(dt);
      console.log(this.arrayX);
      console.log(this.arrayY);

      //Array contains x and y values at the correct position
      let array = [
          {y: this.Yvalues, x: this.Xvalues}
      ];

      let item : any = array.find(i => i.x.find(dt));

      //new filtered x and y values on array 
      console.log(item)
}

Я не могу понять, как я собираюсь это сделать ... я думал, что ключ -> значение было хорошим решением, но у меня даже не может быть вывода .. Извините, если мне чего-то не хватает ..

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Пожалуйста, посмотрите фрагмент кода ниже. Вы можете использовать возвращенный результат как: result.newArrayX и result.newArrayY. Таким образом, вы также сохраните исходные массивы в безопасности.

arrayX =  ["Dec 2008", "Feb 2010", "Apr 2010", "Jul 2010", "Dec 2010", "Feb 2011", "Apr 2012", "Jul 2013", "Mar 2014", "May 2017"];

    arrayY =  [1, 7, 4, 1, 10, 11, 4, 8, 7, 10];

    function filterFunc(filterYear) {

        return this.arrayX.reduce((acc, elem) => {
                if (elem.split(' ')[1] == filterYear) {
                    acc.newArrayX.push(elem);
                    acc.newArrayY.push(this.arrayY[this.arrayX.indexOf(elem)])
                }
                return acc;
            },{newArrayX: [], newArrayY: []}
        );
    }

    result = this.filterFunc('2010');
    console.log(result);
0 голосов
/ 02 мая 2018

Вы можете использовать array#reduce и проверить, существует ли указанное значение в текущей строке даты. Затем добавьте дату и значение, соответствующее этому индексу, из другого массива в ваш массив результатов.

const arrayX = ["Dec 2008", "Feb 2010", "Apr 2010", "Jul 2010", "Dec 2010", "Feb 2011", "Apr 2012", "Jul 2013", "Mar 2014", "May 2017"],
      arrayY = [1, 7, 4, 1, 10, 11, 4, 8, 7, 10],
      year = 2010,
      result = arrayX.reduce((r, date, i) => {
        if(date.includes(year)){
          r.push({x: date, y: arrayY[i]})
        }
        return r;
      },[]);
console.log(result);

Чтобы получить значения X и Y отдельно, например, для целей диаграммы, просто сопоставьте результат и выполните итерации по нему, например так.

let x = result.map(({x}) => x);
let y = result.map(({y}) => y);
...