Javascript 如何迭代数组并根据其数据类型提取元素?

Javascript 如何迭代数组并根据其数据类型提取元素?,javascript,arrays,loops,typeof,splice,Javascript,Arrays,Loops,Typeof,Splice,我正在尝试使用本机javascript从数组中提取所有对象。我一直得到一个对象作为值。我做错了什么 var person1 = { name: "Daniel Machado", life: true }; var person2 = { name: "Marla Singer", life: null }; var array = ["stg", person1, 1, null, person2]; function extractedObj(objToExtract){ f

我正在尝试使用本机javascript从数组中提取所有对象。我一直得到一个对象作为值。我做错了什么

var person1 = { name: "Daniel Machado", life: true };
var person2 = { name: "Marla Singer", life: null };

var array = ["stg", person1, 1, null, person2];


function extractedObj(objToExtract){   
  for(var i = array.length-1; i--;){
    if (typeof array[i] === "object"){
      splicedObj = array.splice(i, 1);
    }
  }
  return splicedObj;
};

extractedObj(array);

// the result I'm looking for is: 
// [Object, Object]
// [person1, person2]

// the result I'm getting is:
// [Object]
// [person1]

输出只是一个对象。我正试着把他们都拉出来。理想情况下,我希望使用forEach和/或arrow函数来实现这一点,但任何方法都可以。我也不太清楚在这种情况下,为什么要减少拼接。我从来没有真正理解过这一点,只是知道这是许多例子所展示的。如果有人能解释一下,我将不胜感激

每次通过循环时,您都在覆盖
拼接对象。您需要将要删除的项推送到结果数组中

var person1={name:“Daniel Machado”,life:true};
var person2={name:“Marla Singer”,life:null};
var数组=[“stg”,person1,1,null,person2];
函数extractedObj(数组){
var=j[];
对于(var i=array.length-1;i>=0;i--){
if(数组类型[i]==“对象”&&数组[i]!==null){
推(数组[i]);
阵列拼接(i,1);
}
}
返回DOBJ;
};

log(extractedObj(数组))如果您可以使用ES5,那么在Array prototype中有一种方法

var person1={name:“Daniel Machado”,life:true};
var person2={name:“Marla Singer”,life:null};
var数组=[“stg”,person1,1,null,person2];
var isObject=函数(元素){
返回元素&&typeof元素==“对象”;
}

console.log(array.filter(isObject))啊,你需要在不覆盖的情况下将其推入。谢谢我已经添加了一个解释,解释了为什么必须向后遍历数组。我在去年的编码中多次看到过这个示例,只是从来没有100%地理解过为什么要这样做。我现在明白了。再次感谢。实际上,我认为您在这方面有几个问题:函数参数名称与函数内部使用的引用不匹配;循环测试使其跳过索引0;和
typeof null===“object”
,因此它将匹配null,而期望的输出不包括它。我在刚刚测试时也注意到了这一点。它仍然没有像我希望的那样发挥作用。我试图返回多个对象(数组中的对象数量)。如果设置了正确的值,它将拉出多个字符串和数字,但它只返回一个对象。有没有关于如何使其返回倍数的建议?这是一个很好的小方法,一定会记住这一点。而且,我可以使用箭头功能!是的,谢谢。还有一个问题,因为我想知道会有什么改进,而不仅仅是复制粘贴,为什么它会返回element&&typeof element?为什么不直接返回元素的类型呢?那里发生了什么事?最近刚学过一点filter,这就是我为什么要问的原因。
typeof null
是object,所以
element&…
检查filter null值。请注意,它仍将包括空对象
{}
,这非常有用。空对象很好,只是不能有null或未定义。这是一个毫无意义的小库项目,我正试图从数组中提取值,这样我就可以通过spread操作符将数组中的数字输入Math.max。会记住空的东西。