uniqueInOrder.js

Codewars 알고리즘 풀이


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]