对原始对象执行省略

时间:2013-07-19 13:01:48

标签: javascript underscore.js

我是新手来强调js,我试图在Object上省略某个属性。我做的是

myObj = _.omit(myObj,name)
console.log(myObj);

仍然myObj似乎拥有属性name。虽然如果我这样做,它似乎工作

newMyObj= _.omit(myObj,name) 
console.log (newMyObj) 
它似乎工作得很好。我做错了什么,有人可以帮忙吗?好的,myObj看起来像这样

Angola: "4.134137685",Brunei: "2.532726835",Countries: "2004",Croatia: "1.717672961", keys: Array[11]

我试图省略“键”,这又是一个对象数组

由于

2 个答案:

答案 0 :(得分:2)

有些东西叫做“调试器”。如果你不知道它们是什么,那就停止你正在做的一切并立即了解它们。例如,在谷歌搜索“Chrome devtools”。在调用_.omit之前停止代码(放置断点)。在控制台中,键入myObj以查看其中包含的内容,然后还name。或者,您可以使用devtools的“范围变量”部分来检查这些变量的值。现在,执行一个步骤(F10)。查看变量是否或如何更改,或再次键入myObj控制台检查其价值。

在您的特定情况下,您报告在执行

时正确删除了该属性
newMyObj= _.omit(myObj,name) 

但不是

myObj= _.omit(myObj,name) 

就其本身而言,这种行为是完全无法解释的。所以还有其他一些你没有告诉我们的事情。我猜你正在做这样的事情:

myObj = { keys: [] };
name = "keys";
delete_property();
console.log(myObj.keys); // []

function delete_property(myObj) {
    myObj = _.omit (myObj, name);
}

然而,这并不是你想象的那样。函数中myObj的赋值什么都不做;它只是重新赋值函数参数的值。它对函数外的myObj没有影响。

可以肯定的是,我们需要查看更多您的实际代码,但这只是一个常规的旧调试问题,您将在编程生涯中遇到数千次,所以最好不要学习自己解决。

答案 1 :(得分:0)

我将此问题解释为您只想使用omit()从对象中删除属性。请注意,omit()返回对象的副本,而不是要删除的指定属性。该方法不会改变对象。

鉴于这个前提,下面的代码与您的代码相匹配,效果很好:

var copy,
    obj = {
        Angola: "4.134137685",
        Brunei: "2.532726835",
        Countries: "2004",
        Croatia: "1.717672961", 
        keys: Array[11]
    },
    check = function (o) {
        _.each(o, function (value, key) {
            console.log("key: " + key + " value: " + value);
        });
    };


copy = _.omit(obj, "keys");
check(copy);

obj = _.omit(obj, "keys");
check(obj);

无论是使用新变量还是现有变量,都会得到相同的结果。

相关问题