我试图找到一个特定的对象密钥并删除它,但我找不到办法。
示例:
{
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
答案 0 :(得分:2)
如果要删除的属性未嵌套在另一个属性中,则可以执行
function filterObject(obj, key) {
if (obj.hasOwnProperty(key)) {
delete obj[key];
}
return obj;
}
甚至没有检查 - 如果找不到要删除的媒体资源,JavaScript就不会抱怨。
答案 1 :(得分:1)
答案 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);