0

我对下划线 js 很陌生,我试图省略对象上的某个属性。我所做的是

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]

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

谢谢

4

2 回答 2

2

这些东西称为“调试器”。如果您不知道它们是什么,那么请停止您正在做的一切并立即了解它们。例如,在 Google 中搜索“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 没有影响。

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

于 2013-07-19T16:38:04.143 回答
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);

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

于 2013-07-19T17:06:29.990 回答