我正在尝试按键从对象中删除属性。
注意到我的变量中有密钥非常重要,我无法执行以下操作:
delete obj.test.a
这是我的代码(不起作用)
var obj = {
b: 2,
test: {
a: 1
}
}
var abc = 'test.a';
delete obj[abc];
console.log(obj);
如何在没有硬编码的情况下删除obj.test.a,而是从变量中取出密钥。
答案 0 :(得分:1)
您可以先将字符串拆分为数组,然后使用reduce()
匹配要删除的对象并将其删除。
var obj = {"b":2,"test":{"a":1}}
var abc = 'test.a'.split('.')
abc.reduce(function(r, e, i) {
if(i == abc.length - 1) delete r[e]
return r[e]
}, obj)
console.log(obj);
这可能是更优雅的方法
var obj = {"b":2,"test":{"a":1}}
'test.a'.split('.').reduce(function(r, e, i, arr) {
return arr[i + 1] ? r[e] : (delete r[e])
}, obj)
console.log(obj);
答案 1 :(得分:0)
解释我的评论的例子:
var obj = {
test: {
a: 'hello'
}
};
function deleteProp(obj, path) {
var props = path.split('.');
var currentObj = obj;
for(var i = 0; i < props.length; i++) {
var prop = props[i];
if(i == props.length - 1) {
delete currentObj[prop];
} else {
currentObj = currentObj[prop];
}
}
}
deleteProp(obj, 'test.a');
console.log(obj); // { test: {} }
答案 2 :(得分:-1)