Удаление элементов из массива на основе существования значения ключа - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть объект, который я преобразовал в массив, используя этот

convertToArray(data: any) {
  let arr = [];
  Object.keys(data).map(function(key){
     arr.push(data[key]);
  });
  return arr;
}

Вот результат

{0: {…}, 1: {…}, 2: {…}, hideTitle: false, template: "football-news", customProperties: {…}}
0: {NewsID: 90, AnotherAttribute: 5, …}
1: {NewsID: 90, AnotherAttribute: 5, …}
2: {NewsID: 90, AnotherAttribute: 5, …}
customProperties: {template: "list-view"}
hideTitle: false
template: "news"
__proto__: Object

в

(6) [{…}, {…}, {…}, false, "football-news", {…}]
0: {NewsID: 90, AnotherAttribute: 5, …}
1: {NewsID: 90, AnotherAttribute: 5, …}
2: {NewsID: 90, AnotherAttribute: 5, …}
3: false
4: "news"
5: {template: "list-view"}
length: 6
__proto__: Array(0)

Я хочу удалить все элементы (arr.pop или filter), которые НЕ имеют ключа NewsID.

Заранее благодарен за любую помощь:)

Ответы [ 5 ]

0 голосов
/ 15 февраля 2019

Попробуйте это:

var arr = [
  {NewsID: 90, AnotherAttribute: 5},
  {NewsID: 90, AnotherAttribute: 5},
  {NewsID: 90, AnotherAttribute: 5},
  false,
  "football-news",
  {template: "list-view"}
];

var result = arr.filter(item => item instanceof Object && ("NewsID" in item));
console.log(result);
0 голосов
/ 15 февраля 2019

У вас есть массив, который имеет значения различных типов и различных типов объектов.Сначала вам нужно проверить, является ли значение в массиве экземпляром объекта или нет.

function convertToArray(data) {
  let arr = [];
  Object.keys(data).map(function(key){
     arr.push(data[key]);
  });
  return arr;
}
var obj = {
   0:  { NewsID: 90, AnotherAttribute: 5},
   1: {NewsID: 90, AnotherAttribute: 5}, 
   2: {NewsID: 90, AnotherAttribute: 5}, 
   hideTitle: false, 
   template: "football-news", customProperties: {template: "list-view"}
};
var arr = convertToArray(obj);
var filterarr = arr.filter(a => a instanceof Object && ("NewsID" in a));
console.log(filterarr);
0 голосов
/ 15 февраля 2019

Вы можете использовать .filter с уничтожением, чтобы отфильтровать значения, которые не определены, сохраняя только те объекты, в которых NewsID дает истинное значение (здесь NewsID будет неопределенным, если его не существует, и, следовательно, будет ошибочным).

Более того, вы можете уточнить свой метод convertToArray, используя Object.values().Нет необходимости дважды зацикливать ваши ключи / значения.

См. Рабочий пример ниже:

function convertToArray(data) {
  return Object.values(data);
}

const myObj = {
  0: {
    NewsID: 90,
    AnotherAttribute: 5
  },
  1: {
    NewsID: 90,
    AnotherAttribute: 5
  },
  2: {
    NewsID: 90,
    AnotherAttribute: 5
  },
  customProperties: {
    template: "list-view"
  },
  hideTitle: false,
  template: "news"
},
arr = convertToArray(myObj),

res = arr.filter(({NewsID}) => NewsID);
console.log(res);

Примечание :

  • Если ваш NewsID может быть 0, то вам следует проверить с помощью.filter(({NewsID}) => NewsID !== undefined).

  • Если ваш NewsID может иметь явное значение undefined (например: вы используете {NewsID: undefined}), вы должны использовать .filter((obj) => obj instanceof Object && "NewsID" in obj)

0 голосов
/ 15 февраля 2019

Используйте простой логический фильтр для Object.values объекта:

const data = {
  0: {
    NewsID: 90,
    AnotherAttribute: 5
  },
  1: {
    NewsID: 90,
    AnotherAttribute: 5
  },
  2: {
    NewsID: 90,
    AnotherAttribute: 5
  },
  customProperties: {
    template: "list-view"
  },
  hideTitle: false,
  template: "news"
};

const arr = Object.values(data).filter(({ NewsID }) => NewsID);

console.log(arr);
0 голосов
/ 15 февраля 2019

Возможно, я неправильно понял ваш вопрос, потому что распечатки в виде изображений действительно трудно читать.


Похоже, у вас есть список объектов, и вы хотите удалить объекты, у которых нетопределенный ключ, правильный?

Вы можете сделать это следующим образом:

result = arr.filter(obj => "NewsID" in obj)

Если вы хотите узнать больше о том, как проверить, есть ли у ключа ключ, это выглядит как хорошее место дляначало: Проверка наличия ключа в объекте JavaScript?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...