首页 > 解决方案 > 如何访问嵌套数组/对象并过滤数组的非空元素,如 NaN、null、0

问题描述

下面是对象数组。我们要做的是

  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:“未定义”}]

2] []

预期的 -

1] [{id:0},{id:null},{id:“未定义”}]

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

标签: javascriptarraysobject

解决方案


您可以转换为 boolean ( !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);


推荐阅读