用户将在textarea中输入各种序列号。每个换行符将指示一个新的序列号。一些要求/限制:


不允许前导空格和尾随空格。
序列中的空白可以。
不允许空白序列
我宁愿不使用JQuery。
存储重复项,以便将其显示给用户。


根据我的测试,我有一个可行的解决方案。我想确保我没有丢失或忽略任何东西。我的问题是:


有没有更有效的方法来检查重复项?
有没有我的解决方案无法捕捉到的明显测试用例?


工作示例:http://jsbin.com/ivusuj/1/

function duplicateCheck() {
    var output = document.getElementById('Output');
    output.innerHTML = '';
    var duplicateSerials = [];
    var count = 0;
    var textArea = document.getElementById('Serials');
    var serials = textArea.value.trim().split(/ *\n */);

    for(var i = 0;i < serials.length;i++){
      var serial = serials[i];

      if(serials.indexOf(serial) != serials.lastIndexOf(serial) &&
         duplicateSerials.indexOf(serial) == -1 && serial !== '') {
        duplicateSerials.push(serial);
      }

    }

  // For testing
  output.innerHTML = '<pre>Serials:\t' + serials.toString() + "<br />" +
                     'Duplicates:\t' + duplicateSerials.toString() + "<br>" +
                     '</pre>';
}


注意:以上内容用于客户端检查。服务器端也将执行相同的检查,以确保数据有效。



更新资料

解决方案比较:http://jsbin.com/ivusuj/4/edit

最佳答案

我认为,如果您使用一个对象来确定之前看到的序列,将会获得明显更好的性能。更接近于此:

var seen = {};
for (var i = 0, j = serials.length; i < j; ++i) {
  var serial = serials[i];
  if (seen.hasOwnProperty(serial)) {
    // Dupe code goes here.
    continue;
  }
  // Can't be a duplicate if we get to this point.
}


虽然这不适用于使用句点的序列。

关于javascript - textarea重复字符串检查忽略开头和结尾的空格,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14432000/

10-09 18:12
查看更多