如何访问嵌套数组/对象并过滤数组的非空元素,如 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}]


ABOUTYOU
浏览 175回答 3
3回答

呼如林

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

拉丁的传说

尝试这个: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);

月关宝盒

为什么它不起作用?是顺序不正确还是有 JavaScript 错误?代码乍一看很好,您可以使用 if (!el.id),它检查 id 是否为“假”(0,null,undefined,NaN,false)您还可以查看“map”和“filter”方法, https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Array/filterhttps://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Array/map
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript