在javascript中有一个很好的方法来从javascript对象(不是数组)中删除Falsy值吗?

时间:2018-02-07 02:45:48

标签: javascript arrays javascript-objects

在JavaScript中,你有一个很好的.filter方法来从数组中删除null或falsy值。到目前为止,我还没有找到一种从JavaScript对象中删除相同方法的方法。

为什么会这样?

目前,您可以为以下数组创建函数:

function stripNulls(arr) {
   return arr.filter(Boolean);
}

是否可以为JS对象创建类似的函数,或者过滤器在JS对象上的工作方式不实用。

3 个答案:

答案 0 :(得分:3)

“我可以对一个对象执行x”(或者就此而言是一个数组)的答案通常是“是”,并且它经常涉及某种形式的ngOnInit() { this.services.callMyService().subscribe( response => {this.response = response; () => this.initInterface(); }, error => alert(error), )

如果你想过滤虚假值,可以这样做:

reduce

这将返回一个没有虚假值的新对象,并使现有对象保持不变。

答案 1 :(得分:1)

警告:此处提供了更好的答案。另外,由于下面的评论,用户delete会发出警告,可能会提供次优的性能。

过滤无效值在对象中稍微复杂一些。从表面上看,这将做你想要的:

var arr = [ 'apple', 43, false ];
var trueArr = arr.filter(Boolean);

console.log(trueArr);

var obj = { 'title': 'apple', 'id': 43, 'isOrange': false, 'test': 'asd' };
Object.keys(obj)
  .filter(key => !obj[key])
  .forEach(key => delete obj[key]);

console.log(obj);

但是,这不会迭代子对象/函数。该逻辑还直接修改原始对象(可能需要也可能不需要)。

通过将此逻辑添加到如下函数中可以轻松更改:

function removeFalseyProperties(obj) {
  Object.keys(obj)
    .filter(key => !obj[key])
    .forEach(key => delete obj[key]);
    
  return obj;
}

var testObj = { 'title': 'apple', 'id': 43, 'isOrange': false, 'test': 'asd' };
var trutheyObj = removeFalseyProperties(testObj);

console.log(trutheyObj);

答案 2 :(得分:0)

虚假值为0,未定义,null,false等。

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

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