Sort()how to work with it?

/** ЗАДАЧА 42 - Проверка сортировки массива
 *
 * 1. Создайте функцию "arraySortInfo" с одним параметром - "inputArray"
 *
 * 2. Если хотя бы один элемент в массиве не является числом - вернуть "Некоторые элементы не являются числами"
 *
 * 3. Если числа в массиве отсортированы по возрастанию - вернуть "Массив отсортирован по возрастанию"
 *
 * 4. Если числа в массиве отсортированы по убыванию - вернуть "Массив отсортирован по убыванию".
 *
 * 5. Если массив не отсортирован - вернуть "Массив не отсортирован"
 */

const a = [5, 'abc', 10, 1]
const b = [4, 10, 14, 25, 25, 50]
const c = [150, 132, 80, 40]
const d = [15, 26, 10, 23, 85]

function arraySortInfo(inputArray){
   if(a !== Number){
    return 'Некоторые элементы не являются числами'
   }
  b.sort((a,b) => a-b)
    return 'Массив отсортирован по возрастанию'
  
}
console.log(arraySortInfo(a)) // Некоторые элементы не являются числами
console.log(arraySortInfo(b)) // Массив отсортирован по возрастанию
console.log(arraySortInfo(c)) // Массив отсортирован по убыванию
console.log(arraySortInfo(d)) // Массив не отсортирован

again, nothing works, is it really necessary to subtract something again, how to write all this correctly, because the question is simple, but my solutions do not work

The google translation

PROBLEM 42 - Checking array sorting

  1. Create a function “arraySortInfo” with one parameter - “inputArray”

  2. If at least one element in the array is not a number - return “Some elements are not numbers”

  3. If the numbers in the array are sorted in ascending order - return “The array is sorted in ascending order”

  4. If the numbers in the array are sorted in descending order, return “The array is sorted in descending order”.

  5. If the array is not sorted, return “The array is not sorted”

Possible Solution:

  1. I believe this answer has already been given Array.some and isNaN (is Not a Number)
if (inputArray.some(isNaN)) return 'Some elements are not numbers'
  1. Maybe not the most elegant solution
function isAscending(inputArray) {
  for (let i = 0; i < inputArray.length - 1; i++) {
    // if the next number is smaller than the current number
    // return false
    if (inputArray[i+1] < inputArray[i]) {
      return false
    }
  }
  // We have got here, so numbers are ascending
  return true
}
  1. Very much the same
function isDecending(inputArray) {
  for (let i = 0; i < inputArray.length - 1; i++) {
    // if the next number is larger than the current number
    // return false
    if (inputArray[i+1] > inputArray[i]) {
      return false
    }
  }
  return true
}
  1. If we have got to here without passing the above tests, then the numbers are not ordered

I’m aware I might be missing something with the above code, but just some quick tests

const arr1 = [1,2,2,3,4]
const arr2 = [4,3,2,1]
const arr3 = [1,3,2,1]

console.log(isAscending(arr1)) // true
console.log(isAscending(arr2)) // false
console.log(isAscending(arr3)) // false
console.log(isDecending(arr1)) // false
console.log(isDecending(arr2)) // true
console.log(isDecending(arr3)) // false

Just be careful of coercible values. [5, "1", 10, 1].some(isNaN) yields false, despite one of the values being a string; as does [5, false, 10, 1].some(isNaN) or [5, null, 10, 1].some(isNaN)

1 Like

I don’t understand what is happening in your code, what is it?(inputArray.some(isNaN))`

function arraySortInfo(inputArray){
   if( inputArray.some(isNaN)){
    return 'Некоторые элементы не являются числами'
   }
  b.sort((a,b) => a-b)
    return 'Массив отсортирован по возрастанию';

  c.sort((a,b) => b-a)
  return 'Массив отсортирован по убыванию'

  d.sort(()=> d )
  return 'Массив не отсортирован'
}`

this not work

Good point. That would have been far too convenient.

From MDN

Number.isNaN() is a more reliable way to test whether a value is the number value NaN or not. Alternatively, the expression x !== x can be used, and neither of the solutions is subject to the false positives that make the global isNaN() unreliable. To test if a value is a number, use typeof x === "number".

This might be more reliable then

// The some() method tests whether at least one element in the array passes the test
if (inputArray.some((item) => typeof item !== 'number')) {
  return 'Some elements are not numbers'
}

Did you click on the links I gave you? e.g. Array.some and isNaN

You haven’t understood the question. It is not asking you to sort numbers.

It is asking you to see if a collection/array of numbers is already sorted.

e.g.
Is the input array sorted in ascending order?

[1,2,5,9] // yes
[9,5,2,1] // no

Is the input array sorted in descending order?

[1,2,5,9] // no
[9,5,2,1] // yes

Is the input array not sorted at all?

[1,3,2,4] // yes

e.g.

if (inputArray.some((item) => typeof item !== 'number')) {
  return 'Некоторые элементы не являются числами'
}
// using the function I created in post #2
if (isAscending(inputArray)) {
  return 'Массив отсортирован по возрастанию'
}

... etc

Вы переходили по ссылкам, которые я вам дал? например, Array.some и isNaN
yes
But this does not give me much, and what I need to do is not sort, but check and display it, I just understood, since questions can not always be understood,)

but I still don’t understand how to write the codefunction arraySortInfo(inputArray){ if( inputArray.some(isNaN)){ return 'Некоторые элементы не являются числами' } if() }

This topic was automatically closed 91 days after the last reply. New replies are no longer allowed.