TheAlgorithms/JavaScript · error · TypeError
Given input is not an array
Error message
Given input is not an array
What it means
Thrown as a TypeError by selectionSort() when the input list is not an array. The function spreads the input ([...list]) and indexes it, so a non-array would either spread incorrectly or fail. This is the outer type guard; a separate inner check (error 130) validates element types.
Source
Thrown at Sorts/SelectionSort.js:13
/* The selection sort algorithm sorts an array by repeatedly finding the minimum element
*(considering ascending order) from unsorted part and putting it at the beginning. The
*algorithm maintains two subarrays in a given array.
*1) The subarray which is already sorted.
*2) Remaining subarray which is unsorted.
*
*In every iteration of selection sort, the minimum element (considering ascending order)
*from the unsorted subarray is picked and moved to the sorted subarray.
*/
export const selectionSort = (list) => {
if (!Array.isArray(list)) {
throw new TypeError('Given input is not an array')
}
const items = [...list] // We don't want to modify the original array
const length = items.length
for (let i = 0; i < length - 1; i++) {
if (typeof items[i] !== 'number') {
throw new TypeError('One of the items in your array is not a number')
}
// Number of passes
let min = i // min holds the current minimum number position for each pass; i holds the Initial min number
for (let j = i + 1; j < length; j++) {
// Note that j = i + 1 as we only need to go through unsorted array
if (items[j] < items[min]) {
// Compare the numbers
min = j // Change the current min number position if a smaller num is found
}
}
if (min !== i) {
// After each pass, if the current min num != initial min num, exchange the position.View on GitHub (pinned to 5c39e87a9a)
Solutions
- Convert array-like objects: selectionSort(Array.from(nodeList)).
- Guard at the boundary: if (!Array.isArray(x)) throw new TypeError('expected array').
- Coerce strings if numeric sorting is intended: selectionSort([...str].map(Number)).
Example fix
// before const sorted = selectionSort(maybeString) // after const arr = Array.isArray(maybeString) ? maybeString : Array.from(maybeString) const sorted = selectionSort(arr)
Defensive patterns
Strategy: type-guard
Validate before calling
function safeSelectionSort(list) {
if (!Array.isArray(list)) {
throw new TypeError('Expected an array')
}
return selectionSort(list)
} Type guard
function isArray(v) {
return Array.isArray(v)
} Try / catch
try {
selectionSort(list)
} catch (e) {
if (e instanceof TypeError && e.message === 'Given input is not an array') {
return selectionSort(Array.from(list))
}
throw e
} Prevention
- Convert strings/NodeLists/Sets to arrays with Array.from before sorting.
- Guard at boundaries where data type is uncertain.
- Avoid passing array-like objects directly.
When it happens
Trigger: Calling selectionSort(null), selectionSort(undefined), selectionSort('dcba'), selectionSort(4321), or selectionSort({0:3}). Passing a string is common because strings are array-like but not arrays.
Common situations: User input from a text field passed unmodified; a value that is sometimes null from a lookup; treating a NodeList as an array without conversion.
Related errors
- Please input a valid list or array.
- One of the items in your array is not a number
- The ${paramName} should be type Number
- Type of n must be number
- Invalid Input
AI-assisted analysis of TheAlgorithms/JavaScript@5c39e87a9a (2026-08-13).
Data as JSON: /api/errors/a564838613ef13c4.
Report an issue: GitHub.