Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.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 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 是否有一个函数可

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

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
是否有一个函数可以帮助我从对象中删除一个属性,该属性将键值对的值作为参数接收


例如
removietem('item3')

可能是
删除

delete obj['option1'];

要按价值进行操作,您可以执行以下操作:

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

deleteByVal('item1');
像这样-


删除obj[“option1”]
删除对象选项1

这个问题回答正确,但我只想补充一点:

您应该为此解决方案编写一个纯函数。这是一个不需要在全局范围内定义对象的函数

因此:

用法:
deleteObjectItemByValue(yourObj,val)

这是一个纯函数,没有副作用,即在外部环境中变异任何东西,并且不依赖于任何全局变量进行操作

内置的?我可以引用值而不是键吗?不是以本机方式,您必须编写自己的函数,遍历对象的所有属性以查找所需的值,然后
删除
属性(-ies)其值与您要查找的值匹配。我是否可以删除值等于item1的元素?@Joseph82请注意,上面的函数将删除具有相同值的多个属性。此外,它使用
=
而不是
==
松散地检查类型。这些都不是坏的或错误的,这取决于你想要什么/需要什么。我相信我的价值观是不同的。你误解了这个问题。该问题询问如何删除按值而不是按键选择的键/值对。请考虑删除或编辑您的答案。
const deleteObjectItemByValue = (Obj, val) => {
    for (var key in Obj) {
        if (Obj[key] == val) {
            delete Obj[key];
            return Obj;
        }
    }
};