如何删除javascript数组中的多余数据

时间:2016-01-05 14:38:49

标签: javascript jquery arrays checkbox

我有一些HTML表单,如下所示:

<input type='checkbox'  name='lecture'  value='1' >
<input type='checkbox'  name='lecture'  value='2' >
<input type='checkbox'  name='lecture'  value='3' >
<input type='checkbox'  name='lecture'  value='4' >

我还有一些jQuery代码,它将所有选中的值添加到数组中,并且此数组转到输入值:

$('#separate_course_list').on("change", ":checkbox", function() {
  var values = $('input:checkbox:checked').map(function() {
    return this.value;
  }).get(); // ["1", "2", "4"]
  $("input[name='comment']").val(values); //this input saves array
});

console.log中,我有这个(让我假装先检查第一个复选框,然后是第三个,然后是第二个):

["1", "815643", "753327", "752023"] // checked first checkbox
["1", "3", "815643", "753327", "752023"]//checked third checkbox
["1", "3", "2", "815643", "753327", "752023"]// checked second checkbox

slice(-1,3)无效。

4 个答案:

答案 0 :(得分:1)

为什么从-1开始切片?

切片方法的第一个参数是您要删除的第一个索引,第二个是您要删除的数据的数量

var array = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
array.splice(1,3);
输出应该是:

Orange,Lemon

来源:http://www.w3schools.com/jsref/jsref_slice_array.asp

答案 1 :(得分:0)

从根本上说,您的语法是错误。很抱歉,slice的语法是:

arr.slice([begin[, end]])

当你给:

slice(-1, 3)

数组的开头不能为-1。所以你必须寻找:

slice(3, -1)

从索引3开始,在最后一个之前结束,留下最后一个,如果这就是你要找的东西。

答案 2 :(得分:0)

您的选择器正在考虑页面上已选中的所有复选框,因此额外值是其他一些复选框,而是使用.map上的input:checkbox:checked[name="lecture"]

$('#separate_course_list').on("change", ":checkbox", function () {

        var values = $('input:checkbox:checked[name="lecture"]').map(function () {
            return this.value;
        }).get(); // ["1", "2", "4"]

        $("input[name='comment']").val(values); //this input saves array

});

答案 3 :(得分:0)

如果您只想确定最后检查过哪个复选框,则可以使用下面的代码段。如果您想要所有选中的复选框,只需使用slice(0,3)

&#13;
&#13;
a= ["1", "815643", "753327", "752023"] // checked first checkbox
b = ["1", "3", "815643", "753327", "752023"] // checked third checkbox
c = ["1", "3", "2", "815643", "753327", "752023"]// checked second checkbox

function IsCheckBox(value) {
  return value < 4;
}

document.write("Checked checkbox " + a.slice(0,3).filter(IsCheckBox).slice(-1)[0] +'<br>')

document.write("Checked checkbox " + b.slice(0,3).filter(IsCheckBox).slice(-1)[0] +'<br>')

document.write("Checked checkbox " + c.slice(0,3).filter(IsCheckBox).slice(-1)[0] +'<br>')


//Alternatively if you want all checked checkboxed this will suffice

document.write("Checked checkboxes " + c.slice(0,3))
&#13;
&#13;
&#13;