用户将在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/