javascript - 使用javascript删除数组元素

标签 javascript jquery arrays

我是 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);

Demo

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

Demo

关于javascript - 使用javascript删除数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24386886/

相关文章:

javascript - 根据值更改 span 标签的颜色

jquery - 如何通过 knockout 将我的 json 数据链接到 html

javascript - 使用 jQUERY onclick 后从链接更改 html 文本

php - Jquery 验证检查数据库中是否存在值

javascript - 如何让 HTML5 Canvas 显示 HTML?

javascript - 在不进行回流的情况下获取元素的宽度

php - 在发送到 MySQL 之前拆分数组数据

Python 字节数组 : Function changes other Instance?

arrays - 如果用变量完成,则用负缓冲区声明的数组有效

javascript - 脚本中的行为不稳定,其中比例和定位都是动态的 - 为什么?