2017-02-17 3 views
-1

Как я могу удалить все одинаковые элементы из массива, если для exsample У меня есть var arr = [1,1,1,2,3,4,5,6,7]; мне нужно получить массив как этого [2,3,4,5,6,7]; Я использую этоКак удалить из массива все те же элементы?

var chotch = 0; 
for(var i = 0; i < text1_arr.length; i++) { 
    if(word1_reg.test(text1_arr[i])) { 
     text1_arr.splice(i, 1); 
     chotch++; 
     if(needCount === chotch) { 
      break; 
     } 
    } else { 
     continue; 
    } 
} 
+2

Какой код вы написали, пытаясь ответить на свой вопрос? Лучше написать код и вставить его здесь, чтобы люди могли видеть, что вы пытались, а не просто просить ответа. –

+0

Чтобы уточнить, при удалении всех элементов вы не хотите сохранять оригинальную копию? Итак, если вы видите более одной копии элемента, вы хотите полностью удалить элемент? –

+0

В моем ответе есть все, что вам нужно. Доброй ночи. –

ответ

0
function removeDuplicates(input){ 
    var out = []; 
    var duplicates = []; 
    input.forEach(function(item){ 
    if(duplicates.indexOf(item)!==-1)return; 
    var outIndex = out.indexOf(item) 
    if(outIndex!==-1){ 
     out.splice(outIndex,1) 
     duplicates.push(item); 
     return; 
    } 
    out.push(item) 
    }); 
    return out; 
} 
removeDuplicates([1,1,1,2,3,4,5,6,7]) // [2, 3, 4, 5, 6, 7] 
+0

Он тоже работает, но здесь много кода. Upvoted. –

0

Вы можете перебрать массив и проверяйте каждый предмет, который он существует только один раз, используя indexOf и lastIndexOf. Если да, то добавьте его в массив результатов.

var arr = [1,1,1,2,3,4,5,6,7]; 

var result = []; 
for (var i = 0; i < arr.length; i++) { 
    if (arr.indexOf(arr[i]) === arr.lastIndexOf(arr[i])) { 
     result.push(arr[i]); 
    } 
} 
+0

Почему downvote? –

+1

Это работает, поддерживается. –

+0

Я должен удалить и каждый раз считать, что, например, var chotch = 0; для (var i = 0; i David

1

После кода возвращает массив только элементы, в которых происходит только один раз.

ES6 решение.

var arr = [1,1,1,2,2,3,4,5]; 
 

 
(function cleanIt(arr) { 
 
    var arr2 = arr.filter((v, i) => arr.indexOf(v) != i); 
 
    var newArr = arr.filter(v => !arr2.includes(v)); 
 
    
 
    console.log(newArr); 
 
    console.log(`Elements deleted: ${arr.length-newArr.length}`); 
 
})(arr);

ES5 раствора. Примечание: Array#includes - ES6 особенность.

var arr = [1,1,1,2,2,3,4,5]; 
 

 
(function cleanIt(arr) { 
 
    var arr2 = arr.filter(function(v,i) { 
 
    return arr.indexOf(v) != i; 
 
    }); 
 
    var newArr = arr.filter(function(v) { 
 
    return !arr2.includes(v); 
 
    }); 
 

 
    console.log(newArr); 
 
    console.log('Elements deleted: ' + (arr.length - newArr.length)); 
 
})(arr);

+0

Работает отлично, поддерживается. Было бы прекрасно, если бы вы добавили версию ES5. –

+0

@David Вы можете принять и перенести ответ;) –

+0

FYI, [includes] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/includes) функция не является ES5- совместимый. –

0

Эта стратегия исключает любой элемент, который может быть найден в 2 раза.

const arr = [1,1,1,2,3,4,5,6,7]; 
 
const uniqs = a => a.filter(e => a.slice(a.indexOf(e) + 1).indexOf(e) === -1); 
 
console.log(uniqs(arr));

Смежные вопросы