Javascript Проверьте, если ключ не существует или должен иметь определенное значение в методе фильтра - PullRequest
2 голосов
/ 24 мая 2019

У меня есть объект как

var obj = [
    {
      key1: true,
    },
    {
      key1: true,
      key2: true,
    },
    {
      key1: true,
      key2: false,
    }
]

И моя функция фильтрации:

const result = obj.filter(item => (!("key2" in item) || item.key2) );
return result;

Здесь я пытаюсь отфильтровать элементы массива, либо key2 не должно существоватьили key2 должно быть правдой.Но в результате я получаю полные предметы, а он не удаляет предмет с key2: false

var obj = [{
    key1: true,
  },
  {
    key1: true,
    key2: true,
  },
  {
    key1: true,
    key2: false,
  }
]


const result = obj.filter(item => (!("key2" in item) || item.key2));
console.log(result);

Ожидаемый результат

var obj = [
  {
    key1: true,
  },
  {
    key1: true,
    key2: true,
  },
]

Ответы [ 3 ]

1 голос
/ 24 мая 2019
var obj = [
    {
      key1: true,
    },
    {
      key1: true,
      key2: true,
    },
    {
      key1: true,
      key2: false,
    }
]
obj.filter(item => (!item.hasOwnProperty('key2') || item.key2));
0 голосов
/ 24 мая 2019

Вы также можете фильтровать по undefined:

var data = [ { key1: true, }, { key1: true, key2: true, }, { key1: true, key2: false, } ] 

let result = data.filter(({key2}) => key2 === undefined || key2)

console.log(result)

Это отфильтровывает для ключа 2 либо truthy, либо undefined

, либо даже короче, как предложено Aswin:

var data = [ { key1: true, }, { key1: true, key2: true, }, { key1: true, key2: false, } ] 

let result = data.filter(({key2}) => !key2)

console.log(result)
0 голосов
/ 24 мая 2019

Используйте Object.hasOwnProperty('key2') для поиска ключа в объекте

var obj = [
    {
      key1: true,
    },
    {
      key1: true,
      key2: true,
    },
    {
      key1: true,
      key2: false,
    }
]

const result = obj.filter(item => (!item.hasOwnProperty('key2') || item.key2) );
console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...