Typescript / Angular 2 - отфильтровать объекты, которые не содержат определенного строкового свойства - PullRequest
0 голосов
/ 05 ноября 2018

Я создаю фильтр в своем угловом приложении, который удаляет все объекты, которые не содержат определенного строкового свойства во вложенном массиве.

например ... У меня есть массив, который выглядит так:

JSON:

[
  {
    "id":1,
    "name":"example1",
    "categories": [
      "red",
      "yellow",
      "pink",
      "green"
    ]
  },
  {
    "id":2,
    "name":"example2",
    "categories": [
      "blue",
      "black",
      "purple",
      "green"
    ]
  },
  {
    "id":3,
    "name":"example3",
    "categories": [
      "red",
      "yellow",
      "black",
      "white"
    ]
  }
]

При нажатии кнопки функция отображает только объекты, которые содержат указанную категорию.

Нечто подобное ...

<button (click)="filter('red')">filter by category</button>

filter(category) {
  // only show objects that contain (category) string.
}

Любая помощь была бы отличной, потому что мне просто не удалось ее взломать.

Надеюсь, это достаточно информации

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Используйте filter для фильтрации вашей записи.

Компонент

var arr = [
  {
    "id":1,
    "name":"example1",
    "categories": [
      "red",
      "yellow",
      "pink",
      "green"
    ]
  },
  {
    "id":2,
    "name":"example2",
    "categories": [
      "blue",
      "black",
      "purple",
      "green"
    ]
  },
  {
    "id":3,
    "name":"example3",
    "categories": [
      "red",
      "yellow",
      "black",
      "white"
    ]
  }
];


function filterData(colorName) {
    arr.filter((item) => {
      return item.categories.indexOf('white') !== -1;
    });
    console.log(arr);
}

HTML

<button (click)="filterData('red')"></button>
0 голосов
/ 05 ноября 2018

Вы можете использовать array.filter и array.includes с !

const data = [
  {
    "id":1,
    "name":"example1",
    "categories": [
      "red",
      "yellow",
      "pink",
      "green"
    ]
  },
  {
    "id":2,
    "name":"example2",
    "categories": [
      "blue",
      "black",
      "purple",
      "green"
    ]
  },
  {
    "id":3,
    "name":"example3",
    "categories": [
      "red",
      "yellow",
      "black",
      "white"
    ]
  }
];


const r = data.filter(d => !d.categories.includes('red'));
console.log(r);

Так что вам нужно изменить функцию фильтра следующим образом:

filter(category) {
  const result = data.filter(d => !d.categories.includes(category));
}
...