2016-12-05 2 views
0

У меня есть массив со следующими элементами:Javascript: Найти и удалить * все * повторяющиеся элементы

A 
B 
B 
C 
B 

Если элемент появляется более чем один раз, я должен удалить все его вхождения. Таким образом, было бы так:

A 
C 

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

Я думал о сохранении объекта: 1. Значение предмета; 2. Сколько раз он появляется; 3. Положение всех выступлений.

Если появилось время, было больше 1, я бы удалил все следующие позиции в массиве. Это хорошая идея? Какой был бы лучший способ сделать это?

спасибо!

+0

Чтобы уточнить, вы только хотите изменить исходный массив, а не создать новый с удаленными элементами из исходного массива? – Daryl

+0

Одним из способов может быть создание нового массива и только толкать исходные значения, проверяя, существует ли значение в новом массиве. Возможно, это не лучшее решение, но это один из способов: P – Medda86

+0

@Daryl Было бы лучше, если бы он был в новом массиве :) – PossessWithin

ответ

9

Вы можете сделать это с помощью filter() и возвращать только уникальные элементы, проверяя, если indexOf равно lastIndexOf

var ar = ['A', 'B', 'B', 'C', 'B']; 
 
var result = ar.filter(function(e) { 
 
    return ar.indexOf(e) == ar.lastIndexOf(e); 
 
}) 
 

 
console.log(result)

+1

@Nenad, Nice! И вместо 'ar.indexOf (e)' вы можете использовать текущий индекс, который 'filter' уже дает нам, по его второму параметру, сравнивать с' ar.lastIndexOf (e) '. Подпись - 'filter (element, index, array)' –

+0

, обратный вызов не может использоваться повторно. –

+0

большое спасибо! – PossessWithin

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