我正在尝试从此对象中删除属性 funky: false
并返回其他属性。这是我的代码,但由于某种原因它不会删除我需要删除的项目。
var user = {
name: "ernest",
age: 50,
funky: false
}
function truthyObjLoop(user) {
for (prop in user) {
if (prop === false) {
delete(prop);
} else {
return (user);
}
}
}
最佳答案
实际问题
delete
是语句而不是函数。因此,您不必为此使用()
。delete
语句从对象中删除一个属性。当你执行delete(prop)
时,它不会有任何效果。引用 MDN ,delete
is only effective on an object's properties. It has no effect on variable or function names.
解决方案
因此,如 syntax section of MDN's delete
page 所示,
delete object.property delete object['property']
要用变量prop
删除对象的属性,你应该使用第二种形式
delete user[prop];
代码中的错误
除此之外,您的代码还有两个错误。
如果当前属性的值不是
false
,您将立即返回。您应该迭代所有属性,然后只需要返回。您实际上应该检查
prop
的值,而不是prop
本身。确保您声明的是循环变量。否则它们将成为全局属性。
所以,你的固定代码看起来像这样
function truthyObjLoop(user) {
// Note: we use `var prop`, otherwise `prop` will become a global variable.
for (var prop in user) {
// This condition is to prevent removing inherited properties
if (user.hasOwnProperty(prop) === false) {
continue;
}
if (user[prop] === false) {
delete user[prop];
}
}
}
truthyObjLoop(user);
console.log(user);
// { name: 'ernest', age: 50 }
更好的方法 - 避免突变
现在我们正在改变(变异)当前传递的对象。但是,更好的替代方法是构造一个新对象,没有您不需要的属性,就像这样
function truthyObjLoop(user) {
var result = {};
for (var prop in user) {
if (user.hasOwnProperty(prop) === false) {
continue;
}
if (user[prop] !== false) {
result[prop] = user[prop];
}
}
return result;
}
console.log(truthyObjLoop(user));
// { name: 'ernest', age: 50 }
console.log(user);
// { name: 'ernest', age: 50, funky: false }
关于javascript - 如何删除对象中的虚假元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30675998/