javascript中有没有一种很好的方法可以从javascript对象(而不是数组)中删除虚假值?

javascript中有没有一种很好的方法可以从javascript对象(而不是数组)中删除虚假值?,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,在JavaScript中,可以使用nice.filter方法从数组中删除null或falsy值。到目前为止,我还没有找到从JavaScript对象中删除相同内容的方法 为什么会这样 目前,您可以为数组创建一个函数,如: function stripNulls(arr) { return arr.filter(Boolean); } 是否可以为JS对象创建类似的函数,或者过滤器在JS对象上的工作方式不实用。警告:这里提供了更好的答案。此外,由于下面的评论,应该警告用户使用delete可能会

在JavaScript中,可以使用nice.filter方法从数组中删除null或falsy值。到目前为止,我还没有找到从JavaScript对象中删除相同内容的方法

为什么会这样

目前,您可以为数组创建一个函数,如:

function stripNulls(arr) {
   return arr.filter(Boolean);
}
是否可以为JS对象创建类似的函数,或者过滤器在JS对象上的工作方式不实用。

警告:这里提供了更好的答案。此外,由于下面的评论,应该警告用户使用delete可能会提供次优性能

在对象中过滤无效值稍微复杂一些。从表面上看,这将满足您的要求:

var arr=['apple',43,false]; var trueArr=arr.filterBoolean; console.logtrueArr; var obj={'title':'apple','id':43,'isOrange':false,'test':'asd'}; Object.keysobj .filterkey=>!obj[键] .forEachkey=>删除对象[key];
console.logobj 我可以对一个对象或数组执行x吗?答案通常是肯定的,而且它经常涉及某种形式的reduce

如果要过滤falsy值,可以执行以下操作:

函数过滤器FalsyObj{ return Object.keysobj.reduceac,key=>{ 如果obj[键]{ acc[键]=obj[键] } 返回acc }, {} } 常量testObj={ a:‘测试’, b:321, c:错 }
console.logfilterFalsystoBjfalsy值为0、未定义、null、false等

myArray
    .map(item => {
        // ...
    })
    // Get rid of bad values
    .filter(Boolean);

通过传递布尔值,我们可以删除所有falsy值。

对象没有可枚举项,比如数组。A for…in循环是您唯一的选择当前答案已就位。您是否希望使用一种方法,该方法不会像上面数组的推论那样发生变化?不太相关,但您的函数名称确实有误导性。如何使用这些要筛选的对象?避免删除@Bergi我们为什么要避免删除?很公平,我会添加一个编辑来说服用户接受Mark的答案,并提到潜在的删除性能问题。我更喜欢这个实现而不是我的。我建议编辑一个片段,只是为了证明概念。没关系。做了一些轻微的风格调整。