如何使用JQuery或Javascript使用动态路径从JSON对象中删除

问题描述 投票:0回答:5

我有一个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>
javascript jquery html css json
5个回答
3
投票

使用带方括号表示法的delete运算符:

const person = {
  firstname: "John",
  lastname: "Doe",
  age: 50,
  eyecolor: "blue"
};
const key = 'age';

delete person[key];

console.log(person);

1
投票

使用括号表示法[]

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


1
投票

您应该使用[]运算符而不是+。因为您想使用变量访问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>

1
投票

当你想通过变量访问密钥时使用Bracket Notation。你应该delete[key] 只传递ageas参数而不是.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>

0
投票

根据这个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>
© www.soinside.com 2019 - 2024. All rights reserved.