Problem
- Implement the function which takes as argument a sequence and returns a list of items without any elements with the same value next to each other and preserving the original order of elements.
- sequence를 인수로 사용한다.
- 서로 옆에 동일한 값을 가진 element가 없는 item list를 반환한다.
- element의 원래 순서는 유지한다.
Solution 01
function uniqueInOrder(iterable) {
let result = [];
for (let i = 0; i < iterable.length; i++) {
if (iterable[i] !== iterable[i + 1]) {
result.push(iterable[i]);
}
}
return result;
}
uniqueInOrder('aabbccdd'); // ['a', 'b', 'c', 'd']
uniqueInOrder('abbcca'); // ['a', 'b', 'c', 'a']
uniqueInOrder('AABBCCDD'); // ['A', 'B', 'C', 'D']
uniqueInOrder('AABbbbb'); // ['A', 'B', 'b']
uniqueInOrder([1, 2, 2, 3, 3, 4]); // [1, 2, 3, 4]
Solution 02
function uniqueInOrder(iterable) {
return [...iterable].filter((i, index) => i !== iterable[index - 1]);
}
uniqueInOrder('aabbccdd'); // ['a', 'b', 'c', 'd']
uniqueInOrder('abbcca'); // ['a', 'b', 'c', 'a']
uniqueInOrder('AABBCCDD'); // ['A', 'B', 'C', 'D']
uniqueInOrder('AABbbbb'); // ['A', 'B', 'b']
uniqueInOrder([1, 2, 2, 3, 3, 4]); // [1, 2, 3, 4]
Solution 03
function uniqueInOrder(iterable) {
return [...iterable].filter((i, index, arr) => i !== arr[index + 1]);
}
uniqueInOrder('aabbccdd'); // ['a', 'b', 'c', 'd']
uniqueInOrder('abbcca'); // ['a', 'b', 'c', 'a']
uniqueInOrder('AABBCCDD'); // ['A', 'B', 'C', 'D']
uniqueInOrder('AABbbbb'); // ['A', 'B', 'b']
uniqueInOrder([1, 2, 2, 3, 3, 4]); // [1, 2, 3, 4]