在JavaScript中,你有一个很好的.filter方法来从数组中删除null或falsy值。到目前为止,我还没有找到一种从JavaScript对象中删除相同方法的方法。
为什么会这样?
目前,您可以为以下数组创建函数:
function stripNulls(arr) {
return arr.filter(Boolean);
}
是否可以为JS对象创建类似的函数,或者过滤器在JS对象上的工作方式不实用。
答案 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);
通过传递布尔值,我们可以删除所有伪造的值。