从json数组中删除数据
Delete data from json array
我正试图从json数组中删除一段数据。例如,我有这个阵列
var favorites = {
"userID": "12345678",
"favorites": [
{ "name" : "My Favorites",
"id" : "87654321",
"items":
[
{
"productID": "11234567",
"added": "TIMESTAMP",
"title": "Project",
"type": "Weekend Project",
"imageURL": "1"
},
{
"productID": "11223456",
"added": "TIMESTAMP",
"title": "Bathroom",
"type": "Weekend Project",
"imageURL": "2"
},
{
"productID": "11223345",
"added": "TIMESTAMP",
"title": "Curves",
"type": "Collections",
"imageURL": "3"
}
]
},
{ "name" : "Bathroom",
"id" : "87654323",
"items":
[
{
"productID": "11122224",
"added": "TIMESTAMP",
"title": "Project",
"type": "Weekend Project",
"imageURL": "1"
},
{
"productID": "11122222",
"added": "TIMESTAMP",
"title": "Room",
"type": "Weekend Project",
"imageURL": "2"
},
{
"productID": "11112222",
"added": "TIMESTAMP",
"title": "Strais",
"type": "Collections",
"imageURL": "3"
},
{
"productID": "11111222",
"added": "TIMESTAMP",
"title": "Door",
"type": "Collections",
"imageURL": "4"
}
]
}
]
}
比如说,我想点击一个按钮,就把某个产品从浴室类别中删除。我该如何做到这一点?
我一直在尝试,但没有成功:
jQuery(document).on('click', ".removeFav", function() {
favorites.favorites[1].items[1].splice();
}
我收到的错误:
未捕获类型错误:对象#没有方法"拼接"
delete
语句:
delete favorites.favorites[1].items[1]
这是正确的方法,它会起作用,但如果您的目标是按顺序保留索引,那么使用splice
方法就是正确的方法:
favorites.favorites[1].items.splice(1,1);
以上操作将删除从第一个索引(第一个参数)开始的一个元素(第二个参数)。
因此需要明确的是:要删除最后一个元素,请使用以下内容:
var arr = favorites.favorites[1].items;
arr.splice(arr.length - 1, 1);
请在JsFiddle上查看您的代码。
如果阵列未设置或为空,您可以采取其他措施来保护代码:
var arr = favorites.favorites[1].items;
if ( arr && arr.length ) {
arr.splice(arr.length - 1, 1);
}
如果您想真正从数组中删除一个项,以便数组中位于该项之后的所有项都向下移动到较低的索引,您可以使用以下内容:
favorites.favorites[1].items.splice(1, 1);
您希望对实际的items
数组进行操作,这意味着要调用items
数组上的方法。对于.splice()
,您传递要开始修改数组的索引,然后传递要删除的项数,从而传递.splice(1, 1)
,它将删除从索引1开始的1个项。
我很可能会为此构建一个原型方法,使命令使用更加简单
// Place anywhere
Object.prototype.cut = function(start, elements){
return this.items.splice(start, elements);
}
// Call using this
favorites.favorites[1].cut(1,1);
通过这种方式,您可以扩展方法并以非常灵活的方式处理数据。
===EDIT===
也许它就像蓝天所指出的那样灵活。更新了以下示例。我的风格是将收藏夹json添加到对象文字中,并在文字中包含您需要的方法。本例包括
- JSON数据
- 一种基于索引的图元裁剪方法
- 一种基于索引的收藏夹获取方法
- 一种基于参数名称值返回收藏夹的方法
代码段
var favorites = {
data: {
"userID": "12345678",
"favorites": [{
"name": "My Favorites",
"id": "87654321",
"items": [{
"productID": "11234567",
"added": "TIMESTAMP",
"title": "Project",
"type": "Weekend Project",
"imageURL": "1"
}, {
"productID": "11223456",
"added": "TIMESTAMP",
"title": "Bathroom",
"type": "Weekend Project",
"imageURL": "2"
}, {
"productID": "11223345",
"added": "TIMESTAMP",
"title": "Curves",
"type": "Collections",
"imageURL": "3"
}]
}, {
"name": "Bathroom",
"id": "87654323",
"items": [{
"productID": "11122224",
"added": "TIMESTAMP",
"title": "Project",
"type": "Weekend Project",
"imageURL": "1"
}, {
"productID": "11122222",
"added": "TIMESTAMP",
"title": "Room",
"type": "Weekend Project",
"imageURL": "2"
}, {
"productID": "11112222",
"added": "TIMESTAMP",
"title": "Strais",
"type": "Collections",
"imageURL": "3"
},
{
"productID": "11111222",
"added": "TIMESTAMP",
"title": "Door",
"type": "Collections",
"imageURL": "4"
}]
}]
},
cut: function(favorite, start, elements) {
return this.data.favorites[favorite].items.splice(start, elements);
},
get: function(favorite) {
return this.data.favorites[favorite];
},
find: function(value, param) {
var found;
this.data.favorites.filter(function(item, i) {
if (item[param] === value) {
found = item;
return;
};
})
return found;
}
};
要使用查找,只需执行类似的操作
favorites.find("Bathroom", "name")
相关文章:
- Laravel 5.2:如何使用Ajax发布和删除数据
- getJSON()-如何删除数据参数前面的AND符号
- 从json数组中删除数据
- Knockoutjs:只在文本框中写入内容时显示内容,在删除数据时隐藏内容
- 无法删除数据表jquery中的多行
- 根据条件删除数据行
- 在$invalid上添加验证指令并从文本框中删除数据的指令
- 从页面上点击的链接中删除数据,然后移动到下一页&在CasperJS中重复
- 正在删除数据(刷新)WebGL Globe
- d3j :删除数据集
- 轨道:找不到文件“提前输入.js”.直到我删除“数据涡轮链接”
- 如果要使用 JSP 和 Java 脚本删除数据,则需要一个确认框
- 删除数据网格 (Dojo) 和表 (数据网格) 的实例正确显示
- 如何从子元素中删除数据目标和数据切换,或禁止元素触发事件
- 在 d3 中单击画布时删除数据
- JSON 解析或删除数据中的双引号,获取表单模型或 rails 中的数据库
- 如何从 php 文件向 json 文件添加和删除数据
- AngularJS:ng-switch从输入字段中删除数据
- 从嵌套对象中删除数据而不发生突变
- 在挖空.js中删除数据后刷新视图模型