我是新手来强调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]
我试图省略“键”,这又是一个对象数组
由于
答案 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);
无论是使用新变量还是现有变量,都会得到相同的结果。