javascript在数组错误中找到重复项

时间:2017-08-04 15:12:17

标签: javascript jquery arrays duplicates

我正在努力实现以下结果。 我有一个textarea,我想转换所有文本(按行)将在此textarea中输入数组。输入文本后,我想检查条目中是否有重复项。

为此,我: 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
}

3 个答案:

答案 0 :(得分:3)

//maybe something like
var inputLines = $('textarea').val().split('\n');
var lineValues = {};

inputLines.forEach(function(line, index){
  if (!lineValues[line]) lineValues[line] = [];
  
  lineValues[line].push(index + 1);
});

Object.keys(lineValues).forEach(function(line){
  if (lineValues[line].length > 1) {
    lineValues[line].forEach(function(value){
      console.log(['Duplicate Value "', line, '":line:', value ].join(''));
    });
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea>
dwdw
dwdwdwdwdwdwdwdw
dwdwdwdw
dwdwdwdw
dwdwdwdwdwdwdwdwdwdw
</textarea>
<div><button>TEST</button></div>

答案 1 :(得分:0)

使用jQuery快速而肮脏:

var names = ["Mike","Matt","Nancy","Adam","Jenny","Nancy","Carl"];
var uniqueNames = [];
$.each(names, function(i, el){
    if($.inArray(el, uniqueNames) === -1) uniqueNames.push(el);
});

答案 2 :(得分:0)

此代码返回所有重复的索引!

参考:find duplication in stringtextarea's lines

&#13;
&#13;
var a= [], j= -1, obj = $('textarea').val().split('\n');
for(var i in obj){
  j= -1;
  while((j= obj.indexOf(obj[i],j+1)) < 1) 
    a.push(i);
}
console.log(a)
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<textarea rows="4" cols="50">
ok
ok.
nok
ok
</textarea>
&#13;
&#13;
&#13;