Найти первое повторяющееся значение из массива по элементу - PullRequest
0 голосов
/ 04 октября 2018

Я проверяю, что элемент массива имеет повторяющееся значение.У меня есть несколько объектов как {S:1,R:2,V:3} в массиве.Я хочу сгенерировать предупреждающее сообщение, если элемент "S" имеет дублирующее значение в этом массиве.

Что я сделал:

var arr=[{S:1,R:2,V:3},{S:2,R:2,V:3},{S:1,R:4,V:5},{S:3,R:2,V:3}, 
         {S:2,R:2,V:3},{S:3,R:4,V:5}];
function duplicateValidation()
{
var sorted_arr = arr.slice().sort();
var results = [];
for (var i = 0; i < sorted_arr.length - 1; i++) {
    if (sorted_arr[i + 1].S == sorted_arr[i].S) {
        results.push(sorted_arr[i]);
         break;
    }
}

   console.log(results);
   return results;
}

if(duplicateValidation().length==1)
{
alert("S -" + duplicateValidation()[0].S +" is duplicate");
}

Но приведенный выше фрагмент ( из этого ответа ) не работает для меня.Я ожидаю S - 1 is duplicate в сообщении с предупреждением.

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

поменяйте на с этим, ваша задача может быть достигнута с помощью вложенного для вместо одного для цикла

var arr=[{S:1,R:2,V:3},{S:2,R:2,V:3},{S:1,R:4,V:5},{S:3,R:2,V:3}, 
         {S:2,R:2,V:3},{S:3,R:4,V:5}];
function duplicateValidation()
{
    var sorted_arr = arr.slice().sort();
    var results = [];
    for (var i = 0; i < sorted_arr.length - 1; i++) {
    var S_type = sorted_arr[i].S;
    for (var j = i; j < sorted_arr.length - 1; j++){
        if (sorted_arr[j + 1].S == S_type) {
            results.push(sorted_arr[i]);
            break;
        }
    }
 }       
   return results;
}

if(duplicateValidation().length > 1)
{
console.log("S - " + duplicateValidation()[0].S +" is duplicate");
}
0 голосов
/ 04 октября 2018

Вам не нужно сортировать массив - все, что нужно, это еще один цикл перебора содержимого - просто сделайте это один раз, и вы сможете проверить наличие дубликатов без сортировки.

Итерируя по массиву и находя для каждого элемента значение «S», и проверяя, было ли оно уже помещено в массив результатов - и, если это так, - помещает индекс дублированного элемента в массив дубликатов.Тогда, если есть дубликаты - вы знаете индекс каждого дубликата.

var arr=[{S:1,R:2,V:3},{S:2,R:2,V:3},{S:1,R:4,V:5},{S:3,R:2,V:3}, 
         {S:2,R:2,V:3},{S:3,R:4,V:5}];

var results = [];
var duplicates = [];
arr.forEach(function(obj, index){
  results.indexOf(obj.S) == -1
  ? results.push(obj.S)
  : duplicates.push(index)
})

var duplicatesLength = duplicates.length;
duplicates.length > 0
 ? console.log(duplicatesLength + ' duplicates found at index (' + duplicates .join(', ')+')')
 : console.log('No duplicates found')

//gives 3 duplicates found at index (2, 4, 5)
// ie: item 0 = item 2, item 1 = item 4, item 3 =  item 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...