从对象中按值删除属性

12

我有一个简单的对象,就像这样:

var obj = {
    "option1": "item1",
    "option2": "item2",
    "option3": "item3"
};

为对象添加新属性,我使用以下代码:

obj[this.value] = this.innerHTML;

// this.innerHTML is used just because I'm adding the value I get from a DOM element

有没有一种函数可以帮助我从对象中删除属性, 并以键值对的值作为参数传入?

例如 removeItem('item3');.


1
内置的 delete 关键字 - ajp15243
3
我能把“key”翻译成“键”的意思,(在上下文中通常指代码里的对象或变量名),而“value”则是指该对象或变量所包含的内容。因此,“Can I refer to value instead of the key?”这句话的意思是:我可以用值代替键吗? - GVillani82
不是原生的,你需要编写自己的函数来迭代所有对象属性,查找所需的值,并删除与您要查找的值匹配的属性。 - ajp15243
3个回答

18

这可能是指delete命令:

delete obj['option1'];

FIDDLE

如果按值传递,你需要这样做:

function deleteByVal(val) {
    for (var key in obj) {
        if (obj[key] == val) delete obj[key];
    }
}

deleteByVal('item1');

FIDDLE


我可以删除值等于item1的元素吗? - GVillani82
1
请注意,上述函数将删除具有相同值的多个属性。此外,它使用“==”而不是“===”进行松散类型检查。这些都不是坏的或错误的,这取决于您想要/需要什么。 - ajp15243
好的,我相信我的值全部都不同。 - GVillani82

2
这个问题已经得到正确回答,但我想补充一点:你应该为这个解决方案编写一个纯函数。也就是说,这个函数不需要在全局范围内定义你的对象。因此:
const deleteObjectItemByValue = (Obj, val) => {
    for (var key in Obj) {
        if (Obj[key] == val) {
            delete Obj[key];
            return Obj;
        }
    }
};

用法:deleteObjectItemByValue(yourObj, val); 这是一个纯函数,没有副作用,即不会改变其外部环境中的任何内容,并且不依赖于任何全局变量进行操作。


-1

像这样-

delete obj["option1"]; 或者 delete obj.option1;


3
你误解了问题。问题要求按照值来选择删除键/值对,而不是按照键来选择。请考虑删除或编辑你的回答。 - revelt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接