【发布时间】:2018-01-12 14:16:46
【问题描述】:
我正在努力实现以下结果。 我有一个文本区域,我想转换将在这个文本区域中输入的所有文本(按行)。输入文本后,我想检查条目中是否有重复项。
为此,我: 1) 从 textarea 创建一个数组(名为 myarrayfromtextarea,如下) 2)我创建一个重复值的数组(下面命名为 checkArray) 3) 我遍历第一个数组中的所有值并检查第二个数组中的匹配项。
理论上,它工作得很好,但我尝试在 textarea 中输入以下值:
- dwdw
- dwdwdwdwdwdwdwdw
- dwdwdwdw
- dwdwdwdw
- dwdwdwdwdwdwdwdwdwdw
我希望只找到一个重复值(第 3 行和第 4 行),但令人难以置信的是,当我运行 --> checkArray.indexOf(array[i]) 时,第 1 行也显示了匹配项。
你能帮帮我吗?
var myarrayfromtextarea = $('#My_textarea').val().split('\n'); // create array from textarea
console.log("array from textarea: " + myarrayfromtextarea)
var myArr = myarrayfromtextarea; /// here I start to find duplicates
var obj = {};
var checkArray = "["
myArr.forEach(function(item) {
if (typeof obj[item] == 'number') {
checkArray = checkArray + item + ",";
obj[item]++;
} else {
obj[item] = 1;
}
});
checkarraylenght = (checkArray.length - 1)
checkArray = checkArray.substring(0, checkarraylenght)
checkArray = checkArray + "]" + '';
console.log("checkarray = " + checkArray)
myarrayfromtextarea = myarrayfromtextarea + '';
var array = myarrayfromtextarea.split(',');
var arrayLength = array.length;
for (var i = 0; i < arrayLength; i++) {
if (checkArray.indexOf(array[i]) == -1) {
console.log("Not a duplicate: " + array[i]);
} else {
console.log("Duplicate value: " + array[i]);
}
//Do something
}
【问题讨论】:
-
checkArray是一个字符串,因此您使用的是返回部分匹配的String#indexOf,而不是只返回完全匹配的Array#indexOf。不过,checkArray变量确实没有意义。您已经使用值创建了一个对象 - 只需遍历键并查看obj[key] > 1是否为。如果是这样,你知道有重复。 -
我理解你对字符串/数组的解释,但我对如何修改我的代码以使其工作有点迷茫..
-
查看 Taplar 的解决方案。使用实际的数组,而不是数组的字符串解释。
标签: javascript jquery arrays duplicates