使用javascript删除数组元素

使用javascript删除数组元素,javascript,jquery,arrays,Javascript,Jquery,Arrays,我是javascript和jquery新手,需要从下面的数组结构中删除一个元素 [{ "tag": "tag1", "description": "description1" }, { "tag": "tag2", "description": "description2" }, { "tag": "tag3", "description": "description3" }] 要删除的元素是已知的{“tag”:“tag2”,“descripti

我是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
中的每个元素之间的比较并不简单,因此您可以使用:

它使用自定义搜索函数执行搜索,并返回不匹配的数组元素。结果将替换先前的
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
});