javascript - 如何删除对象中的虚假元素?

标签 javascript object

我正在尝试从此对象中删除属性 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);
        }
    }
}

最佳答案

实际问题

  1. delete 是语句而不是函数。因此,您不必为此使用 ()

  2. 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];

代码中的错误

除此之外,您的代码还有两个错误。

  1. 如果当前属性的值不是false,您将立即返回。您应该迭代所有属性,然后只需要返回。

  2. 您实际上应该检查 prop 的值,而不是 prop 本身。

  3. 确保您声明的是循环变量。否则它们将成为全局属性。

所以,你的固定代码看起来像这样

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/

相关文章:

javascript - 将 div 标记添加到我的 .js.erb 文件时,Ajax 功能似乎失败

javascript - 如何在 javascript 中将对象的普通数组转换为多级数组?

java - 填充数组的对象列表 asList 无法编译需要可序列化列表

javascript - 如何访问复杂的 JSON

javascript - 从数据库插入下拉列表到wordpress页面($.post没有功能)

prototypal-inheritance - 这个 Animal = function Animal 是做什么的?

JavaScript 参数对象返回意外输出

php - 在 ajax 上隐藏 var 数据

javascript - 如何在 jquery 中创建多维数组/对象并通过 AJAX post 传递

javascript - 如何使用对象的键调用函数..?