查找对象键并将其删除

时间:2017-04-26 10:59:41

标签: javascript underscore.js lodash

我试图找到一个特定的对象密钥并删除它,但我找不到办法。

示例:

{
    Tree: {
        apples: "green",
        color: "brown"
    },

    House: {
        windows: "transparent",
        flowers: "Bupleurum"
    }
}

我想找到House对象并将其删除,因此我只会留下Tree对象。

{
      Tree: {
         apples: "green",
         color: "brown"
        },
}

我从其他堆栈溢出问题尝试了以下函数,但它没有工作

function filterObject(obj, key) {
    for (var i in obj) {
        if (!obj.hasOwnProperty(i)) continue;
        if (typeof obj[i] == 'object') {
            filterObject(obj[i], key);
        } else if (i == key) {
            delete key;
        }
    }
    return obj;
}

我是JavaScript的新手,我们将不胜感激!

更新

我设法用你给我的例子做我想做的事,谢谢!我还希望能够做的是删除多个对象键。

实施例

 var myHouse =  {
        House: {
            windows: "transparent",
            doorColor: "red",

             Kitchen: {
                 tableColor: 'silver',
                 forks: "silver"
              },

             Garden: {
                 flowers: "Bupleurum"
               }
        }
    }

我想从House对象,Kitchen对象和Garden对象中删除,所以稍后我将只留下House对象。

var myHouse = {
            House: {
                windows: "transparent",
                doorColor: "red",
            }
        }

我尝试使用lodash实用程序库以下列方式执行此操作,但它没有工作。

_.unset(myHouse, ['House.Kitchen', 'House.Garden']); 

从我在文档中看到的,可以将数组的路径传递给unset函数。 https://lodash.com/docs/4.17.4#unset

4 个答案:

答案 0 :(得分:2)

如果要删除的属性未嵌套在另一个属性中,则可以执行

function filterObject(obj, key) {
    if (obj.hasOwnProperty(key)) {
        delete obj[key];
    }
    return obj;
}

甚至没有检查 - 如果找不到要删除的媒体资源,JavaScript就不会抱怨。

答案 1 :(得分:1)

保持简单

delete ExampleObject['House']

delete ExampleObject.House

小提琴:https://jsfiddle.net/ak8xentw

答案 2 :(得分:1)

Lodash提供unset函数,该函数也适用于嵌套对象:

// remove Tree
_.unset(obj, 'Tree');

// Remove House.windows
_.unset(obj, 'House.windows');

<强>更新

omit可用于从单个对象中删除多个键:

myHouse.House = _.omit(myHouse.House, ['Kitchen','Garden'])

omit不会更改其作用的对象,因此我们将myHouse.House的值设置为新对象。

答案 3 :(得分:0)

使用 for in循环(保持简单):

var ExampleObject={
    Tree: {
        apples: "green",
        color: "brown"
    },

    House: {
        windows: "transparent",
        flowers: "Bupleurum"
    }
};

for (var index in ExampleObject) {
 if(index==="House"){
    delete ExampleObject[index];
    }
 }

console.log(ExampleObject);