82

我有一个 JavaScript 对象,如下所示:

var data = {items: [
    {id: "1", name: "Snatch", type: "crime"},
    {id: "2", name: "Witches of Eastwick", type: "comedy"},
    {id: "3", name: "X-Men", type: "action"},
    {id: "4", name: "Ordinary People", type: "drama"},
    {id: "5", name: "Billy Elliot", type: "drama"},
    {id: "6", name: "Toy Story", type: "children"}
]};

如果我想在这个列表中添加/删除项目,我将如何使用 jQuery 来完成它?客户希望这个列表可以动态修改。

4

8 回答 8

223

首先,您引用的代码不是JSON。您的代码是 JavaScript 对象文字表示法。JSON是为更容易解析而设计的子集。

您的代码定义了一个对象 ( data),其中包含一个对象数组 ( items)(每个对象都带有idnametype)。

你不需要也不需要 jQuery,只需要 JavaScript。

添加项目:

data.items.push(
    {id: "7", name: "Douglas Adams", type: "comedy"}
);

这增加了结尾。在中间添加见下文。

移除一个项目:

有几种方法。该splice方法是最通用的:

data.items.splice(1, 3); // Removes three items starting with the 2nd,
                         // ("Witches of Eastwick", "X-Men", "Ordinary People")

splice修改原始数组,并返回您删除的项目的数组。

中间添加:

splice实际上既添加又删除。该splice方法的签名是:

removed_items = arrayObject.splice(index, num_to_remove[, add1[, add2[, ...]]]);
  • index- 开始更改的索引
  • num_to_remove- 从该索引开始,删除这么多条目
  • addN- ...然后插入这些元素

所以我可以像这样在第三个位置添加一个项目:

data.items.splice(2, 0,
    {id: "7", name: "Douglas Adams", type: "comedy"}
);

这就是说:从索引 2 开始,删除零个项目,然后插入以下项目。结果如下所示:

var data = {items: [
    {id: "1", name: "Snatch", type: "crime"},
    {id: "2", name: "Witches of Eastwick", type: "comedy"},
    {id: "7", name: "Douglas Adams", type: "comedy"},     // <== The new item
    {id: "3", name: "X-Men", type: "action"},
    {id: "4", name: "Ordinary People", type: "drama"},
    {id: "5", name: "Billy Elliot", type: "drama"},
    {id: "6", name: "Toy Story", type: "children"}
]};

您可以删除一些并立即添加一些:

data.items.splice(1, 3,
    {id: "7", name: "Douglas Adams", type: "comedy"},
    {id: "8", name: "Dick Francis", type: "mystery"}
);

...这意味着:从索引 1 开始,删除三个条目,然后添加这两个条目。结果是:

var data = {items: [
    {id: "1", name: "Snatch", type: "crime"},
    {id: "7", name: "Douglas Adams", type: "comedy"},
    {id: "8", name: "Dick Francis", type: "mystery"},
    {id: "4", name: "Ordinary People", type: "drama"},
    {id: "5", name: "Billy Elliot", type: "drama"},
    {id: "6", name: "Toy Story", type: "children"}
]};
于 2010-12-27T11:18:26.650 回答
19

拼接好,大家解释拼接我就不解释了。你也可以在 JavaScript 中使用delete关键字,很好。您也可以使用$.grep来使用 jQuery 来操作它。

jQuery方式:

data.items = jQuery.grep(
                data.items, 
                function (item,index) { 
                  return item.id !=  "1"; 
                });

删除方式:

delete data.items[0]

对于添加 PUSH 是更好的拼接,因为拼接是重量级的功能。Splice 创建一个新数组,如果你有一个巨大的数组,那么它可能会很麻烦。删除有时很有用,删除后如果您查找数组的长度,那么那里的长度没有变化。所以明智地使用它。

于 2010-12-27T11:28:09.673 回答
13

如果您使用的是 jQuery,您可以使用 extend 函数来添加新项目。

var olddata = {"fruit":{"apples":10,"pears":21}};

var newdata = {};
newdata['vegetables'] = {"carrots": 2, "potatoes" : 5};

$.extend(true, olddata, newdata);

这将产生:

{"fruit":{"apples":10,"pears":21}, "vegetables":{"carrots":2,"potatoes":5}};
于 2013-07-31T16:35:44.787 回答
8

那根本不是 JSON,它只是 Javascript 对象。JSON是数据的文本表示,它使用 Javascript 语法的子集。

您找不到任何有关使用 jQuery 操作 JSON 的信息的原因是因为 jQuery 没有任何东西可以做到这一点,而且通常根本不会这样做。您以 Javascript 对象的形式操作数据,然后根据需要将其转换为 JSON 字符串。(不过,jQuery 确实有用于转换的方法。)

你所拥有的只是一个包含数组的对象,因此你可以使用你已经拥有的所有知识。只需用于data.items访问数组。

例如,要使用动态值向数组中添加另一个项目:

// The values to put in the item
var id = 7;
var name = "The usual suspects";
var type = "crime";
// Create the item using the values
var item = { id: id, name: name, type: type };
// Add the item to the array
data.items.push(item);
于 2010-12-27T11:18:59.643 回答
6

在 json 数组中添加对象

var arrList = [];
var arr = {};   
arr['worker_id'] = worker_id;
arr['worker_nm'] = worker_nm;
arrList.push(arr);

从 json 中删除对象

它为我工作。

  arrList = $.grep(arrList, function (e) { 

        if(e.worker_id == worker_id) {
            return false;
        } else {
            return true;
        }
    });

它返回一个没有该对象的数组。

希望能帮助到你。

于 2017-02-02T17:24:03.027 回答
3

好吧,它只是一个 javascript 对象,因此您可以data.items像操作普通数组一样进行操作。如果你这样做:

data.items.pop();

您的items数组将缩短 1 项。

于 2010-12-27T11:15:10.440 回答
1

保持简单:)

var my_form_obj = {};
my_form_obj.name = "Captain America";
my_form_obj.weapon = "Shield";

希望这可以帮助!

于 2019-01-16T05:18:40.943 回答
0

尝试

data.items.pop();
data.items.push({id: "7", name: "Matrix", type: "adult"});

var data = {items: [
    {id: "1", name: "Snatch", type: "crime"},
    {id: "2", name: "Witches of Eastwick", type: "comedy"},
    {id: "3", name: "X-Men", type: "action"},
    {id: "4", name: "Ordinary People", type: "drama"},
    {id: "5", name: "Billy Elliot", type: "drama"},
    {id: "6", name: "Toy Story", type: "children"}
]};

data.items.pop();
data.items.push({id: "7", name: "Matrix", type: "adult"});

console.log(data);

于 2019-04-16T05:39:04.253 回答