Как удалить объект из массива, значение ключа которого не определено в React Native? - PullRequest
1 голос
/ 01 мая 2020

У меня есть список, который после выбора значений возвращает массив. Теперь предположим, что я выбираю 1-е и 3-е значения, пропуская 2-е, тогда возвращаемый массив выглядит так:

 [
  {
   "cname": "10TKN", 
   "code": "403", 
   "id": 1
  },
  {
   "cname": undefined, 
   "code": undefined, 
   "id": 2
  }, 
  {
   "cname": "20TKN", 
   "code": "403", 
   "id": 3
  }
 ]

Я хочу получить ожидаемый результат как:

 [
   {
    "cname": "10TKN", 
    "code": "403", 
    "id": 1
   },
   {
    "cname": "20TKN", 
    "code": "403", 
    "id": 3
   }
 ]

Ответы [ 4 ]

2 голосов
/ 01 мая 2020

Вы можете использовать JavaScript Array.filter() для фильтрации undefined значений.

const data = [
  {
   "cname": "10TKN", 
   "code": "403", 
   "id": 1
  },
  {
   "cname": undefined, 
   "code": undefined, 
   "id": 2
  }, 
  {
   "cname": "20TKN", 
   "code": "403", 
   "id": 3
  }
 ];
 
 const res = data.filter(({cname, code, id }) => cname && code && id);
 console.log(res);

Это обеспечит возврат только объектов с истинными значениями.

В качестве альтернативы, как указано HMR в комментариях, если вы хотите проверить только undefined, будет лучше сделать это:

const res = data.filter(({cname, code, id }) => cname !== undefined && code !== undefined && id !== undefined);
0 голосов
/ 01 мая 2020

Вы можете использовать Destructuring assignment и пропустить некоторые значения через запятую, например:

const arr = [
  {
   "cname": "10TKN", 
   "code": "403", 
   "id": 1
  },
  {
   "cname": undefined, 
   "code": undefined, 
   "id": 2
  }, 
  {
   "cname": "20TKN", 
   "code": "403", 
   "id": 3
  }
 ]
 
const [first, ,third] = arr;

console.log(first, third);

Разрушающее присваивание - игнорирование некоторых возвращаемых значений

0 голосов
/ 01 мая 2020

Вы можете использовать filter, как уже предлагалось, но вам придется проверить выбранные идентификаторы из списка, а затем отбросить те, которые не были выбраны. Короче говоря, вы вернете true, только если идентификатор объекта списка совпадает с выбранным вами

const dataList = [
  {
   "cname": "10TKN", 
   "code": "403", 
   "id": 1
  },
  {
   "cname": undefined, 
   "code": undefined, 
   "id": 2
  }, 
  {
   "cname": "20TKN", 
   "code": "403", 
   "id": 3
  }
 ];

 const selectedDataIds = [1, 3];
 const res = dataList.filter(({ id }) => selectedDataIds.includes(id));
 console.log(res);
0 голосов
/ 01 мая 2020

Предполагая, что ключ, который мы хотим оценить, равен cname. Нам нужно отфильтровать массив с помощью функции Array.filter:

let arr = [
  {
   "cname": "10TKN", 
   "code": "403", 
   "id": 1
  },
  {
   "cname": undefined, 
   "code": undefined, 
   "id": 2
  }, 
  {
   "cname": "20TKN", 
   "code": "403", 
   "id": 3
  }
 ];

arr = arr.filter(({cname}) => cname);
console.log(arr)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...