【问题标题】:How to remove duplicates from this unique char separated string? [duplicate]如何从此唯一的字符分隔字符串中删除重复项? [复制]
【发布时间】:2017-07-17 11:55:43
【问题描述】:

我正在从表格行中收集一个文本框值。文本框的值是变化的。我正在尝试从字符串中删除重复项。我正在查看 this 接受的答案,但重复项仍然存在。

var memo    = "";
$("#f_sendToPic").find('#t_obj input[class=no_memo]').each(function(index, result) {
   memo +=$(this).val();
   memo += "@";
});

var val_memo = $.unique(memo.split('@'));
var arr_memo = val_memo.join('|||');

alert(memo);
alert(arr_memo);

如果可能的话,我更喜欢浏览器友好的方法而不是性能。

【问题讨论】:

  • 作为@ 文本框中的有效条目?如果是这样,您将无法将其用作分隔符。
  • 同样来自docs Description: Sorts an array of DOM elements, in place, with the duplicates removed. Note that this only works on arrays of DOM elements, not strings or numbers. 你需要在dom元素上调用unique,而不是添加字符串版本:1.1.3
  • @t3dodson 没有。我阻止将特殊字符输入到文本框中。因此,文本框的值可能是字符串、数字或组合。
  • 为什么要追加到字符串,然后再拆分。为什么不将它的 val 收集到一个数组中。
  • Yeldar 的意思是,你为什么不在你的.each 里面做arr_memo.push($(this).val()) 然后在循环之后做var arr_memo = val_memo.join('|||');,整个部分用@ 加入值然后立即将它拆分到@ 987654330@似乎毫无意义

标签: javascript jquery


【解决方案1】:

使用属性名称设置为值的对象,重复项将被自动过滤掉。然后使用Object.keys() 获取数组中的属性名称,并使用.join() 数组获取值由"@" 分隔的字符串。

var working = {};
$("#f_sendToPic").find('#t_obj input[class=no_memo]').each(function() {
  working[this.value] = true;
});

var memo = Object.keys(working).join("@");

console.log(memo);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="f_sendToPic"><div id="t_obj">
  <input class="no_memo" value="abc">
  <input class="no_memo" value="def">
  <input class="no_memo" value="abc">
  <input class="no_memo" value="def">
  <input class="no_memo" value="ghi">
</div></div>

顺便说一句,请注意this.value$(this).val(); 更易于阅读、更易于键入并且执行效率更高。

【讨论】:

  • 感谢您的回答。我得到了预期的输出。
  • 如果你的代码可以是 ES6+,你也可以使用Set 代替 object 和 Object.keys。更合适也更好看,但目前还不是所有浏览器都支持。
  • @YeldarKurmangaliyev - 如果问题中的代码看起来很老派,我通常不会在答案中建议新的语言功能,而且如您所知,IE 不支持 Set(部分支持在 IE11 中不算)。但是,是的,Set 会更整洁地做同样的事情。
  • @nnnnnn 是的,我也明白了,所以我更新了我的答案:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-27
  • 2012-01-30
  • 1970-01-01
  • 2021-01-14
相关资源
最近更新 更多