【问题标题】:how to remove excess data in javascript array [closed]如何删除javascript数组中的多余数据[关闭]
【发布时间】:2016-04-09 10:20:36
【问题描述】:

我有一些看起来像这样的 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) 不起作用。

【问题讨论】:

  • 那么您只想要与这些复选框关联的值吗?那个有名字的讲座?为什么不在页面范围内映射那些而不是所有复选框?看起来你试图解决一个自我强加的问题,而不是一开始就试图不引起问题。
  • 但是"815643", "753327", "752023" 是从哪里来的???我不确定是什么问题?!

标签: javascript jquery arrays checkbox


【解决方案1】:

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

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

当你给予时:

slice(-1, 3)

数组不能以-1 作为开头。所以你一定在寻找:

slice(3, -1)

从索引3 开始并在最后一个之前结束,如果这是您要查找的,则离开最后一个。

【讨论】:

    【解决方案2】:

    为什么要从 -1 开始切片?

    slice方法的第一个参数是第一个要删除的索引,第二个是要删除的数据个数

    var array = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
    array.splice(1,3);
    

    输出应该是:

    Orange,Lemon

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

    【讨论】:

    • 所以你只是从W3Schools 复制了一些东西,这不仅仅是诽谤,(参见w3fools.com),这甚至是如何回答的?请编辑您的答案以符合问题的要求。
    • 他可以自己思考,给出的答案是没有建设性的......此外,对于一个最简单的想法来说,就像一个分裂......如果我使用现有的例子,我会与一些人进行比较。 .
    • 好的好的。我什至不知道谁投票给你答案,但祝你好运。 :)
    【解决方案3】:

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

    $('#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
    
    });
    

    【讨论】:

    • Op 已经评论了// ["1", "2", "4"] 所以我猜这已经是预期/返回的结果。我可能是错的,因为这完全不清楚这里问的是什么,恕我直言
    • 非常感谢。现在它起作用了!但奇怪的是,我没有额外的复选框摘录这些复选框。 TY,你救了我的神经
    • 因此,对于未来,您对地图返回内容的评论是不准确的。确保在发布时提供准确、完整的问题描述,否则我们很难确定问题以帮助您解决问题。
    • 哦,我明白了。我在解释方面有一些问题。我的错误
    【解决方案4】:

    如果你只是想确定最后选中了哪个复选框,可以使用下面的代码sn-p。如果您想要所有选中的复选框,您可以使用slice(0,3)

    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))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-03
      • 1970-01-01
      • 2020-12-19
      • 1970-01-01
      • 1970-01-01
      • 2021-11-02
      相关资源
      最近更新 更多