Как я могу реализовать функцию, которая принимает в качестве аргумента последовательность и возвращает список элементов без каких-либо элементов с одинаковым значением рядом друг с другом и с сохранением исходного порядка элементов?
Например:
1. uniqueInOrder('AAAABBBCCDAABBB') == ['A', 'B', 'C', 'D', 'A', 'B']
2. uniqueInOrder('ABBCcAD') == ['A', 'B', 'C', 'c', 'A', 'D']
3. uniqueInOrder([1,2,2,3,3]) == [1,2,3]
Добро пожаловать в Stack Overflow! Пожалуйста, возьмите тур (вы получите значок!) и прочитайте центр помощи, в частности Как задать хороший вопрос?. Лучше всего провести исследование, поиск для связанных тем на SO, и попробовать. Если вы застряли и не можете выбраться после дополнительных исследований и поиска, опубликуйте минимальный воспроизводимый пример свою попытку и конкретно укажите, где вы застряли. Люди будут рады помочь.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


спред оператор позволяет вам принимать последовательность аргументов. Это делает последовательность аргументов доступной для функции в виде массива, с которым вы затем можете работать для удаления дубликатов.
function unique(...items) {
console.info(items.length)
}
Если вы настаиваете на принятии строки или объекта, подобного массиву, в качестве аргумента, вы можете использовать набор для отслеживания дубликатов.
function unique(input) {
items = new Set()
for (let item of input) {
items.add(item)
}
return items
}
Эти советы должны помочь вам ответить на ваш вопрос. Что касается готового решения, вам может потребоваться просто использовать цикл for и проверить вручную:
function unique(input) {
let output = []
for (let i = 0; i < input.length; i++) {
if (input[i] != output[output.length - 1] || i == 0) {
output.push(input[i])
}
}
return output
}
> unique("11223332233")
["1", "2", "3", "2", "3"]
Вы можете взять массив из заданных данных, если задан массив, взять этот массив, если задана строка, взять символы и отфильтровать массив, проверив последний a и фактический элемент b, и вернуть неравные элементы.
const uniqueInOrder = v => Array.from(v).filter((b, i, { [i - 1]: a }) => a !== b);
console.info(uniqueInOrder('AAAABBBCCDAABBB')); // ['A', 'B', 'C', 'D', 'A', 'B']
console.info(uniqueInOrder('ABBCcAD')); // ['A', 'B', 'C', 'c', 'A', 'D']
console.info(uniqueInOrder([1, 2, 2, 3, 3])); // [1, 2, 3].as-console-wrapper { max-height: 100% !important; top: 0; }Вы используете .reduce из Array
function uniqueInOrder(data) {
var test = Array.from(data)
// Check for previous item, if not the current one then insert
return test.reduce((res, x, index) => {
if (res[res.length - 1] !== test[index]) {
res.push(x)
}
return res;
}, [])
}
console.info(uniqueInOrder('AAAABBBCCDAABBB')); // ['A', 'B', 'C', 'D', 'A', 'B']
console.info(uniqueInOrder('ABBCcAD')); // ['A', 'B', 'C', 'c', 'A', 'D']
console.info(uniqueInOrder([1, 2, 2, 3, 3])); // [1, 2, 3]
пожалуйста, добавьте то, что вы пробовали.