как перебрать несколько массивов внутри массива и отфильтровать значение из него-Javascript - PullRequest
0 голосов
/ 16 марта 2019

Я использую структуру EXTJS для своего кода.ниже моя структура массива:

data = [{
  id: 22,
  rows: [{
    id: "673627",
    name: "ABS",
    address: "536street"
  }, {
    id: "333",
    name: "TEST$$",
    address: "536street"
  }, {
    id: "999",
    name: "TEST$$",
    address: "536street"
  }]

}, {
  id: 33,
  rows: [{
    id: "899",
    name: "TES",
    address: "536street"
  }, {
    id: "333",
    name: "TEST$$",
    address: "536street"
  }, {
    id: "999",
    name: "TES673",
    address: "536street"
  }]

}]

Теперь я хочу отфильтровать имя из этого массива, значение которого я сравниваю с, скажем, "TEST $$".Я делаю это;

Ext.each(data, function(item) {
  filter = item.rows.filter(function(name) {
    return name.name === "TEST$$";
  }, this);
}, this);
console.log(filter);

В этом случае он возвращает только 1 совпадение, где у меня есть 3 совпадения для этого конкретного значения.Он возвращает совпадение из последнего элемента в массиве данных, и, следовательно, я не получаю все совпадающие значения, есть идеи, как это можно зациклить, чтобы получить все совпадающие значения?

thx!

1 Ответ

2 голосов
/ 16 марта 2019

Вы переназначаете переменную filter на каждой итерации массива data:

filter = item.rows.filter(function(name) {
  return name.name === "TEST$$";
}, this);

На последней итерации существует только одно совпадение, однос id из 333, так что это единственный, который вы видите после запуска Ext.each.Попробуйте нажать во внешний массив, который вместо не перезаписывается:

const testItems = [];
Ext.each(data, function(item) {
  const filtered = item.rows.filter(row => row.name === "TEST$$")
  testItems.push(...filtered);
});
console.log(testItems);

Обратите внимание, что нет необходимости передавать контекст this.

Другойопция заключается в flatMap, чтобы сначала извлечь все rows в один массив:

const output = data
  .flatMap(({ rows }) => rows)
  .filter(({ name }) => name === 'TEST$$');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...