我是 javascript 和 jquery 的新手,需要从下面的数组结构中删除一个元素
[{
"tag": "tag1",
"description": "description1"
}, {
"tag": "tag2",
"description": "description2"
}, {
"tag": "tag3",
"description": "description3"
}]
要删除的元素已知{"tag":"tag2", "description":"description2"}
。
我怎样才能找到这个元素并从数组中删除。
请找到我用来删除元素的代码
var actionDic = [];
actionDic.push({
description: desc,
tag: tag
});
当用户在 textinput 中输入文本并选择“添加”选项时,actionDic 数组就会被填充。
var deleterow = {
tag: "tag2",
description: "description2"
};
var index = $.inArray(deleterow, actionDic);
if (index != -1) {
actionDic.splice(index, 1);
}
未获得正确的索引。请让我知道代码中有什么问题。
谢谢。
最佳答案
由于要删除的项目与 actionDic
中的每个元素之间的比较并非微不足道,因此您可以使用 jQuery.grep()
:
actionDic = jQuery.grep(actionDic, function(elem) {
return elem.tag == deleterow.tag && elem.description == deleterow.description;
}, true);
它使用自定义搜索函数执行搜索并返回不匹配的数组元素。结果替换了 actionDic
的先前值并有效地删除了该项目。
更新
不幸的是,这个方法可能被认为很繁重,因为每次调用都会创建一个新数组;无论是就 jQuery 的功能还是标准的 JavaScript 功能而言,都缺乏这一特殊功能。 ECMAScript 6 将具有 Array.prototype.find()
方法将完成在数组中查找索引的工作(您可以使用该方法执行拼接)。
您当然也可以自己写一个:
(function($) {
$.find = function(arr, fn) {
for (var i = 0, len = arr.length; i < len; ++i) {
if (fn(arr[i], i, arr)) {
return i;
}
}
return -1;
};
}(jQuery));
var index = $.find(actionDic, function(elem) {
return elem.tag == deleterow.tag && elem.description == deleterow.description;
});
if (index != -1) {
actionDic.splice(index, 1);
}
关于javascript - 使用javascript删除数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24386886/