使用javascript删除数组元素
我是javascript和jquery新手,需要从下面的数组结构中删除一个元素使用javascript删除数组元素,javascript,jquery,arrays,Javascript,Jquery,Arrays,我是javascript和jquery新手,需要从下面的数组结构中删除一个元素 [{ "tag": "tag1", "description": "description1" }, { "tag": "tag2", "description": "description2" }, { "tag": "tag3", "description": "description3" }] 要删除的元素是已知的{“tag”:“tag2”,“descripti
[{
"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
中的每个元素之间的比较并不简单,因此您可以使用:
它使用自定义搜索函数执行搜索,并返回不匹配的数组元素。结果将替换先前的actionDic
值,并有效地删除该项
更新
不幸的是,这种方法可能会被认为很重,因为每次调用都会创建一个新数组;无论是jQuery可以做什么,还是标准JavaScript功能,都缺少这个特殊的特性。ECMAScript 6将有一个方法来完成在数组中查找索引的工作(您可以使用该方法执行拼接)
当然,你也可以自己写一篇:
(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);
}
(函数($){
$.find=函数(arr,fn){
对于(变量i=0,len=arr.length;i
var actionDic=[{
“标记”:“标记1”,
“说明”:“说明1”
}, {
“标记”:“标记2”,
“说明”:“说明2”
}, {
“标记”:“标记3”,
“说明”:“说明3”
}]
var元素={“tag”:“tag2”,“description”:“description2”}
对于(var i=0;i我在我的一个项目中实现了indexOfObject
方法Array prototype
。它通过给定的属性
名称和值搜索对象的索引。如下所示:
Array.prototype.indexOfObject = function(searchTerm, property) {
for (var i = 0, l = this.length; i < l; i++) {
if (this[i][property] === searchTerm) {
return i;
}
}
return -1;
};
然后可以使用该索引从数组中删除对象:
if (index > -1) {
arr.splice(index, 1);
}
以下是中的工作示例。这将获取内部数组对象:
for (var x = 0; x < actionDic.length; x++){
var arrayItem = actionDic[x];
if (arrayItem["tag"] == "tag2"){
alert(arrayItem["description"]);
}
}
for(var x=0;x
工作提琴:您可以使用它,它包含许多对象、数组等的有用帮助
正在删除数组元素:
array = _.reject(array, function(item) {
return item.tag == 'tag2'; // <- if tag is unique to whole array
});
array=\拒绝(数组、函数(项){
return item.tag=='tag2';//如果您说没有获得正确的索引,那么$.actionDic()的代码在哪里?我仍然没有看到函数$.actionDic()的代码。$.actionDic()的代码在哪里你正在使用它来查找索引。问题在于该函数中对不起,我使用的是actionDic,而不是inArray,请查找更新的问题。我认为它应该是!=
而不是=
行elem.tag=deleterow.tag
@Satpal-Ugh,noob错误!实际上应该是=
,因为我使用的反转标志作为最后一个参数传递。是的,我有时会混淆filter和grepThanks@Jack&Satpal@user2071152,这里是筛选器示例和down注释。幸运的是,OP没有使用下划线。
if (index > -1) {
arr.splice(index, 1);
}
for (var x = 0; x < actionDic.length; x++){
var arrayItem = actionDic[x];
if (arrayItem["tag"] == "tag2"){
alert(arrayItem["description"]);
}
}
array = _.reject(array, function(item) {
return item.tag == 'tag2'; // <- if tag is unique to whole array
});