【问题标题】:How to prevent pushing value into Array twice? (jQuery)如何防止两次将值推入数组? (jQuery)
【发布时间】:2013-10-17 04:55:22
【问题描述】:

我有一个从 HTML 中的数据属性中获取唯一数字的函数。在我的例子中,它被称为 data-key,它有一个唯一的数字。

现在,当单击具有数据键的 HTML 元素旁边的按钮时,该键号将被推入一个数组。

我不希望将同一个数字多次放入数组中。

有没有一种简单的方法可以做到这一点?我想这样做的方式是在推送之前先检查该元素是否已经在数组中,但我觉得有更简单的方法?

我的 Codepen:http://codepen.io/leongaban/pen/CEfxi

单击 按钮将输入值添加到数组中。

jQuery

var deletedArray = [];

$('.remove_info').unbind('click').bind("click", function(event) {
    //console.log('clicked remove x');
    var value = $(this).prev().attr('value');
    var key = $(this).prev().data('key');

    deletedArray.push(key);
    console.log('this value = '+value+' deletedArray = '+deletedArray);
});

【问题讨论】:

  • .unbind('click').bind("click",...的目的是什么?
  • 也许修改 DOM 以将该元素标记为已插入其值并在插入之前检查该标志,例如添加data-inserted=true

标签: javascript jquery arrays


【解决方案1】:

应该是注释但是在push函数调用之前放了一个控制语句

  if (deletedArray.indexOf(key) < 0) deletedArray.push(key);

为了浏览器兼容性jQuery的inArray

  if ($.inArray(key, deletedArray) < 0) deletedArray.push(key);

注意:indexOf 与 IE 8 及更早版本不兼容

【讨论】:

  • 同意,好像是这样;尽管对于那些没有实现Array.indexOf()的浏览器,可能值得展示如何使用$.inArray()
  • 同意@DavidThomas,由于使用的是jQuery,所以$.inArray()更好,因为浏览器兼容性问题。
  • @DavidThomas 我对 jQuery 的 $.inArray() 不太熟悉,您可以编辑答案以获得替代
  • @RecoveringSince2003 是的,这是有道理的,但我不知道如何使用该 jQuery 函数,因此您可以编辑答案以包含该函数
  • 当您自己的编辑弹出时,我正在编辑(添加$.inArray())。是的,就是这样。
【解决方案2】:

如果数组中的所有元素都必须是唯一的,那么我真的建议使用 Underscore 的数组联合:

arr = ["1", 2, "apple"];

console.log(_.union(arr, 3)); //["1", 2, "apple", 3]
console.log(_.union(arr, 2)); //["1", 2, "apple"]

【讨论】:

  • 请记住,“union”是不可变的。如果你想“推”入 arr,做 arr = _.union(arr, key)
  • 为什么要使用另一个库,其中已经有另一个库能够做到这一点或没有它。
  • 与使用 jQuery 进行 DOM 操作的原因相同:Underscore 实际上是任何 js 项目的标准实用工具带
  • 不,仅仅为此使用另一个库是没有意义的,因为jQuery 已经在使用中。
  • 为什么你争论这没有意义,jQuery$.inArray 来检查数组,甚至仅仅因为这个微小的原因而使用另一个库是不明智的,inArray 比 @ 更好987654326@ 在这种情况下,最后,这个问题不是用underscore 而是jQuery 标记的。
猜你喜欢
  • 2018-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多