Как написать функцию, возвращающую аргументы по порядку в JavaScript? - PullRequest
2 голосов
/ 14 апреля 2019

Как я могу реализовать функцию, которая принимает в качестве аргумента последовательность и возвращает список элементов без каких-либо элементов с одинаковым значением рядом друг с другом и сохраняя первоначальный порядок элементов?

Например:

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]

Ответы [ 3 ]

1 голос
/ 14 апреля 2019

Вы можете взять массив из заданных данных, если массив указан, взять этот массив, если дана строка, взять символы и отфильтровать массив, проверив последний a и фактический элемент bи вернуть неравные элементы.

const uniqueInOrder = v => Array.from(v).filter((b, i, { [i - 1]: a }) => a !== b);

console.log(uniqueInOrder('AAAABBBCCDAABBB')); // ['A', 'B', 'C', 'D', 'A', 'B']
console.log(uniqueInOrder('ABBCcAD')); // ['A', 'B', 'C', 'c', 'A', 'D']
console.log(uniqueInOrder([1, 2, 2, 3, 3])); // [1, 2, 3]
.as-console-wrapper { max-height: 100% !important; top: 0; }
1 голос
/ 14 апреля 2019

Оператор распространения позволяет принять последовательность аргументов.Он делает последовательность аргументов доступной для функции в виде массива, который затем можно использовать для удаления дубликатов.

function unique(...items) {
  console.log(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"]
0 голосов
/ 14 апреля 2019

Вы используете .reduce из массива

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.log(uniqueInOrder('AAAABBBCCDAABBB')); // ['A', 'B', 'C', 'D', 'A', 'B']
console.log(uniqueInOrder('ABBCcAD')); // ['A', 'B', 'C', 'c', 'A', 'D']
console.log(uniqueInOrder([1, 2, 2, 3, 3])); // [1, 2, 3]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...