You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在jQuery中从复选框多值数据中获取唯一值?

问题:如何获取复选框选中的唯一数据(包含data-title和data-value)

我在选择复选框输入字段时,希望仅获取唯一数据。但由于单个复选框会返回data-title和data-value两个值,无法直接使用jQuery.unique()函数。当前实现代码如下:

jQuery('#showselected').on('click', function() { 
  var selected = jQuery("#checkboxes input:checked").map(function(i, el) { 
    return { datatitle: jQuery(this).attr('data-title'), dataid: jQuery(this).attr('data-value') }; 
  }).get(); 
  jQuery('#rez').empty(); 
  jQuery.each(jQuery.unique(selected), function(key, value) { 
    jQuery('#rez').append(valu...
  });
});

请问该如何修改代码以实现获取唯一数据的需求?


嘿,这个问题我之前也踩过坑!jQuery.unique()其实只对DOM元素数组或者字符串、数字这类原始值数组生效,对咱们这种包含datatitle和dataid的对象数组完全起不了作用,所以得换个思路来做对象数组的去重。

解决方案思路

首先得明确去重的判断标准:一般来说data-value(也就是代码里的dataid)是每条数据的唯一标识,所以咱们就以它为依据来去重;如果需要data-title和data-value组合起来唯一,也可以调整判断逻辑。

修改后的完整代码

jQuery('#showselected').on('click', function() { 
  var selected = jQuery("#checkboxes input:checked").map(function(i, el) { 
    return { 
      datatitle: jQuery(this).attr('data-title'), 
      dataid: jQuery(this).attr('data-value') 
    }; 
  }).get(); 

  // 步骤1:实现对象数组去重
  var uniqueSelected = [];
  var seenIds = {}; // 用对象存已出现过的dataid,查询效率高

  jQuery.each(selected, function(index, item) {
    // 如果当前dataid没被记录过,就加入去重数组
    if (!seenIds[item.dataid]) {
      seenIds[item.dataid] = true;
      uniqueSelected.push(item);
    }
  });

  // 步骤2:渲染去重后的结果
  jQuery('#rez').empty(); 
  jQuery.each(uniqueSelected, function(key, value) { 
    // 这里可以根据你的需求调整渲染格式
    jQuery('#rez').append('<div>' + value.datatitle + ' (ID: ' + value.dataid + ')</div>'); 
  });
});

关键细节说明

  • seenIds对象用来快速判断某个dataid是否已经出现过,对象的键查询是O(1),比数组遍历判断效率高很多
  • 如果你的去重要求是**datatitle和dataid同时相同才算重复**,只需要把判断逻辑改成下面这样:
    // 用组合键作为判断依据
    var uniqueKey = item.datatitle + '-' + item.dataid;
    if (!seenIds[uniqueKey]) {
      seenIds[uniqueKey] = true;
      uniqueSelected.push(item);
    }
    

内容的提问来源于stack exchange,提问作者Mac Taylor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:55:36