我有一个JSON对象“人”,我需要删除一个键“age”,它应该作为参数传递给一个函数,如下面给出的例子。在函数内部,删除密钥的语句被添加为delete person+key;
但它不起作用。请按以下方式建议删除密钥的方法,因为我必须在“p”元素单击上动态删除密钥。
<!DOCTYPE html>
<html>
<head>
<script>
var person = {
firstname: "John",
lastname: "Doe",
age: 50,
eyecolor: "blue"
};
function funToDelete(key){
delete person+key;
document.getElementById("demo").innerHTML =
person.firstname + " is " + person.age + " years old.";
}
</script>
</head>
<body>
<p id="demo"></p>
<p onclick="funToDelete('.age')">Click me</p>
</body>
</html>
使用带方括号表示法的delete
运算符:
const person = {
firstname: "John",
lastname: "Doe",
age: 50,
eyecolor: "blue"
};
const key = 'age';
delete person[key];
console.log(person);
使用括号表示法[]
:
delete person[key];
打电话就像这样:
funToDelete("age");
示范:
var person = {
firstname: "John",
lastname: "Doe",
age: 50,
eyecolor: "blue"
};
function funToDelete(key) {
delete person[key];
document.getElementById("demo").innerHTML =
person.firstname + " is " + person.age + " years old.";
}
<p id="demo"></p>
<p onclick="funToDelete('age')">Click me</p>
注意 - 因为你要删除age
,所以上面显示了undefined
。
您应该使用[]运算符而不是+。因为您想使用变量访问Object中的属性。代码应该是
delete person[key]
方括号表示法用于使用变量名称或表达式访问Object的属性。
<!DOCTYPE html>
<html>
<head>
<script>
var person = {
firstname: "John",
lastname: "Doe",
age: 50,
eyecolor: "blue"
};
function funToDelete(key){
delete person[key]; // This is where the key gets evaluated to a sting
document.getElementById("demo").innerHTML =
person.firstname + " is " + person.age + " years old.";
}
</script>
</head>
<body>
<p id="demo"></p>
<p onclick="funToDelete('age')">Click me</p>
</body>
</html>
当你想通过变量访问密钥时使用Bracket Notation。你应该delete[key]
只传递age
as参数而不是.key
var person = {
firstname: "John",
lastname: "Doe",
age: 50,
eyecolor: "blue"
};
function funToDelete(key){
delete person[key];
document.getElementById("demo").innerHTML =
person.firstname + " is " + person.age + " years old.";
}
<p id="demo"></p>
<p onclick="funToDelete('age')">Click me</p>
根据这个OP
评论:
我在上面添加了一个简单的JSON示例。但在我的实际情况下,对象是复杂和动态的,所以我需要传递对象路径“.category [1] .additionalinfo”(只是一个例子)来删除对象内部的元素
更通用的方法可以通过key
传递split()
路径,dot
并使用reduce()
获取删除的密钥:
var person = {
firstname: "John",
lastname: "Doe",
age: 50,
eyecolor: "blue",
foo: {bar: "something"}
};
function funToDelete(pathToKey)
{
let keys = pathToKey.split(".");
let toDelete = keys.reduce((acc, key, idx, arr) =>
{
if (idx < arr.length - 1) acc = acc[key];
return acc;
}, person);
delete toDelete[keys[keys.length - 1]];
console.log(person);
}
<p id="demo"></p>
<p onclick="funToDelete('foo.bar')">Click me</p>