【问题标题】:Optimize Javascript Method to fill or empty an array优化 Javascript 方法填充或清空数组
【发布时间】:2013-01-11 22:58:57
【问题描述】:

我想知道是否有更好的方法将复选框值添加/删除到数组中。遗憾的是我不能使用 ECMAScript 5 indexOf(),因为我需要支持 IE8/7。

这是一个有效的 jsfiddle 示例:http://jsfiddle.net/puyQr/

这个方法的作用是:

/**
 * If a user clicks onto the checkbox, the value of the value attribute is
 * only added to the array when the value not yet exists. However, if
 * the value already exists, the value is removed.
 */

var values = [];
jQuery(':checkbox').on('click', function(){     
    var index = jQuery.inArray(this.value, values);
    if(index === -1) {
        values.push(this.value);
    } else {
        values.splice(index, 1);
    }
});

【问题讨论】:

  • 您可以将对象保留为地图并添加/删除复选框名称(或我猜的值)。它会更快,但除非你有数百个复选框,否则它不会有真正的区别。
  • MDN 在这些浏览器中有support indexOf 的代码

标签: javascript jquery arrays optimization


【解决方案1】:

从复选框获取值的另一种方式:

var values = jQuery(':checkbox:checked').map(function(){
    return $(this).val();
}).get();

demo

【讨论】:

    【解决方案2】:

    是的,使用对象字面量。

    var values = {};
    jQuery(':checkbox').on('click', function () {     
        if (this.value in values && values[this.value] === 1) {
            values[this.value] = 0;
        } else {
            values[this.value] = 1;
        }
    });
    

    here

    如果你以后想要它作为一个Array,转换它是一件简单的事情,使用for..in并检查value1,然后再保留

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-01
      • 2016-12-13
      • 1970-01-01
      相关资源
      最近更新 更多