Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从JavaScript对象中删除密钥?_Javascript - Fatal编程技术网

如何从JavaScript对象中删除密钥?

如何从JavaScript对象中删除密钥?,javascript,Javascript,假设我们有一个具有以下格式的对象: var thisIsObject= { 'Cow' : 'Moo', 'Cat' : 'Meow', 'Dog' : 'Bark' }; 我想做一个按键删除的函数: removeFromObjectByKey('Cow'); 运算符允许您从对象中删除属性 下面的例子都做同样的事情 // Example 1 var key = "Cow"; delete thisIsObject[key]; // Example 2

假设我们有一个具有以下格式的对象:

var thisIsObject= {
   'Cow' : 'Moo',
   'Cat' : 'Meow',
   'Dog' : 'Bark'
};
我想做一个按键删除的函数:

removeFromObjectByKey('Cow');
运算符允许您从对象中删除属性

下面的例子都做同样的事情

// Example 1
var key = "Cow";
delete thisIsObject[key]; 

// Example 2
delete thisIsObject["Cow"];

// Example 3
delete thisIsObject.Cow;
如果您感兴趣,请阅读以获得深入的解释。

简单到:

删除object.keyname;

删除对象[“keyname”];

如果您使用的是下划线.js或Lodash,则有一个函数“omit”可以完成此操作。

如果要修改当前对象,请将返回的对象指定给当前对象

thisIsObject = _.omit(thisIsObject,'Cow');
对于纯JavaScript,请使用:

delete thisIsObject['Cow'];
使用纯JavaScript的另一个选项

thisIsObject = Object.keys(thisIsObject).filter(key =>
    key !== 'cow').reduce((obj, key) =>
    {
        obj[key] = thisIsObject[key];
        return obj;
    }, {}
);

你想让函数成为jQuery函数还是这与jQuery有什么关系?那实际上是一个JavaScript对象,JavaScript中不存在关联数组。是的,我认为只是一些术语上的混淆,即它是JavaScript而不是jQuery,它是一个对象而不是数组(OP可能来自具有关联数组的其他语言)。如果在对象中的键上循环,并且如果它们与某个值匹配,则将其删除,这是否会影响在对象上循环时的键索引?在我看来,使用
for(var key in object)
遍历该对象仍将匹配该键,并且尝试在循环中使用
object[key]
将抛出错误。(或返回
undefined
)注意在某些情况下使用
delete
时IE8可能引发异常。请参阅,但它会在数组中留下一个未定义的值,这使迭代变得困难。有人知道此操作的运行时间吗?已否决。问题是,下划线和lodash中的uz.omit都返回新对象,而不修改当前对象。因此,这与纯javascript略有不同
delete o.property
在幕后弊大于利,因为它改变了
o
的隐藏类,使其成为一个通用的慢速对象。object.property=未定义是合法的。工作得很好!(向上投票)向上投票。在许多情况下,一个新的不可变对象更可取;这是非常误导的。对象。键(thisIsObject)仍将拾取“cow”。所以它并没有被真正删除。如果密钥是生成的数字,而我们不知道它是否存在,我们可以下一步做:
const unknownKey=100500
删除对象[`${unknownKey}`]
thisIsObject = Object.keys(thisIsObject).filter(key =>
    key !== 'cow').reduce((obj, key) =>
    {
        obj[key] = thisIsObject[key];
        return obj;
    }, {}
);