@IvanS1989

Отсортировать массив и вернуть bolean?

Нужно написать и вернуть true или false функцией isSorted. true - если сначала идут все цифры по возрастанию, а после буквы по алфавиту. false - понятно если все не по такому порядку. Примеры:
isSorted([0, 1, 2, 2, 2, 3, 'a', 'b', 'w']) === true
isSorted([0, 3, 1, 2, 2, 2, 'a', 'b', 'w']) === false
isSorted(['a', 1, 2, 2, 2]) === false
isSorted([1, 2, 2, 0, 'a']) === false


Моя логика была сначала выбрать цифры и поместить их в новый массив, если они не совпадают с индексами нового массива то вернуть false. Но почему-то в if элементы не добавляются а перезаписуют массив в моем примере.
let boxes = ['a', 1, 2, 2, 2];

for (let i = 0; i < boxes.length; i++) {
  let newArray = new Array();
  if (isFinite(boxes[i])) {
    // console.log(boxes[i].charCodeAt(0));
    newArray[i] = i;
    
    console.log(newArray);
    console.log(boxes[i]);
    
  } else {
    return false;
  }
  
  console.log(newArray);
}


Кто подскажет с решением. Вообще правильная ли логика и почему после if элементы не добавляются в массив а перезаписывают его?
  • Вопрос задан
  • 112 просмотров
Пригласить эксперта
Ответы на вопрос 2
Seasle
@Seasle Куратор тега JavaScript
\( ゚ヮ゚)/
const comparator = (a, b) => {
  if (typeof a === 'number' && typeof b === 'number') {
    return a - b;
  } else {
    return a.toString().localeCompare(b.toString());
  }
};

const isSorted = array => {
  const count = array.length;
  return array.every((current, index) => {
    if (index + 1 < count) {
      const next = array[index + 1];
      return comparator(current, next) <= 0;
    } else {
      return true;
    }
  });
};
Ответ написан
bingo347
@bingo347 Куратор тега JavaScript
Ткнуть в доку лучше готового к копипасте ответа
const isSorted = arr => arr.every((el, i) => {
  if(i === 0) { return true; }
  const prev = arr[i - 1];
  const elType = typeof el;
  const prevType = typeof prev;
  if(elType === prevType) {
      return el >= prev;
  }
  return elType === 'string' && prevType === 'number'
});
isSorted([0, 1, 2, 2, 2, 3, 'a', 'b', 'w']); // true
isSorted([0, 3, 1, 2, 2, 2, 'a', 'b', 'w']); // false
isSorted(['a', 1, 2, 2, 2]); // false
isSorted([1, 2, 2, 0, 'a']); // false
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Artezio Нижний Новгород
от 130 000 до 180 000 ₽
Artezio Москва
от 160 000 до 220 000 ₽
Intspirit Краснодар
от 80 000 до 150 000 ₽