как получить доступ к вложенному массиву / объекту и отфильтровать непустые элементы массива, такие как NaN, null, 0 - PullRequest
0 голосов
/ 07 апреля 2020

Ниже приведен массив объектов. что нам нужно сделать, это

  1. создать массив, который содержит все непустые элементы массива arr со значением, не равным null, NaN, 'undefined' и 0
  2. оставшийся во втором массиве
var arr = [
  { id: 15 },
  { id: -1 },
  { id: 0 },
  { id: 3 },
  { id: 12.2 },
  {},
  { id: null },
  { id: NaN },
  { id: "undefined" }
];


я пробовал


var obj1 = {};
 var prop1 = [];
 var prop2 = [];
  arr.forEach(el=>{
      if(el.id!==0 || el.id!==null || el.id!==undefined || el.id!==NaN){
          prop1.push(el)
      }
      else{
          prop2.push(el)
      }
  })
  console.log(prop1)

  console.log(prop2)

, но он не работает

вывод я получаю -

1] [{id: 15}, {id: -1}, {id: 0}, {id: 3}, {id: 12.2}, {}, {id: null}, {id : null}, {id: "undefined"}]

2] []

ожидается -

1] [{id: 0} , {id: null}, {id: "undefined"}]

2] [{id: 15}, {id: -1}, {id: 3}, {id: 12.2}]

Ответы [ 3 ]

2 голосов
/ 07 апреля 2020

Вы можете привести к логическому (!el.id), который будет обрабатывать большинство случаев, и вам придется иметь дело с "undefined" отдельно:

var arr = [
  { id: 15 },
  { id: -1 },
  { id: 0 },
  { id: 3 },
  { id: 12.2 },
  {},
  { id: null },
  { id: NaN },
  { id: "undefined" }
];

var obj1 = {};
 var prop1 = [];
 var prop2 = [];
  arr.forEach(el=>{
      if(!el.id || el.id === "undefined"){
          prop1.push(el)
      }
      else{
          prop2.push(el)
      }
  })

  console.log(prop1);
  console.log(prop2);
  console.log(prop1.length);
  console.log(prop2.length);
1 голос
/ 07 апреля 2020

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

var arr = [
  { id: 15 },
  { id: -1 },
  { id: 0 },
  { id: 3 },
  { id: 12.2 },
  {},
  { id: null },
  { id: NaN },
  { id: "undefined" }
];
let filterArray = arr.filter((el) => {return !el.id || [0,null,"undefined",NaN].includes(el.id)});
console.log(filterArray);
let filterArray1 = arr.filter((el) => {return el.id && ![0,null,"undefined",NaN].includes(el.id)});
console.log(filterArray1);
0 голосов
/ 07 апреля 2020

почему не работает? Неверный порядок или есть ошибка JavaScript?

На первый взгляд код выглядит хорошо, вы можете использовать if (! El.id), который проверяет, является ли id "ложным" (0 , null, undefined, NaN, false)

Вы также можете взглянуть на методы "map" и "filter", https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Array/map

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