Shelly Pro 1设备JavaScript引擎无数组sort方法,如何实现排序?
关于Shelly Pro 1(Espruino环境)数组无sort方法的问题
误解澄清
Shelly Pro 1搭载的Espruino是面向嵌入式设备优化的轻量JavaScript环境,为适配硬件资源限制,它对标准ECMAScript的API做了裁剪——你遇到的数组无sort方法、typeof返回array而非Array都是正常特性,并非你对JS的理解有误,是该嵌入式环境的特殊实现。
实现数组排序的方案
由于环境未内置sort方法,可手动实现轻量排序算法,以下是两种适合该场景的实现:
1. 冒泡排序(适合小规模数组)
function bubbleSort(arr) { let len = arr.length; for (let i = 0; i < len; i++) { for (let j = 0; j < len - i - 1; j++) { if (arr[j] > arr[j + 1]) { // 交换元素 let temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } return arr; } // 使用示例 let testArray = [3, 1, 2]; bubbleSort(testArray); print("Sorted array:", testArray); // 输出 Sorted array: 1,2,3
2. 插入排序(小数据量下效率优于冒泡)
function insertionSort(arr) { let len = arr.length; for (let i = 1; i < len; i++) { let key = arr[i]; let j = i - 1; while (j >= 0 && arr[j] > key) { arr[j + 1] = arr[j]; j--; } arr[j + 1] = key; } return arr; } // 使用示例 let testArray = [5, 2, 9, 1]; insertionSort(testArray); print("Sorted array:", testArray); // 输出 Sorted array: 1,2,5,9
3. 支持自定义规则的排序
如果需要处理非数字数组或自定义排序逻辑,可扩展排序函数:
function customSort(arr, compareFunc) { // 默认升序比较数字,可传入自定义比较函数 const compare = compareFunc || ((a, b) => a - b); let len = arr.length; for (let i = 0; i < len; i++) { for (let j = 0; j < len - i - 1; j++) { if (compare(arr[j], arr[j + 1]) > 0) { let temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } return arr; } // 示例:降序排序 let testArray = [3,1,2]; customSort(testArray, (a,b) => b - a); print("Desc sorted:", testArray); // 输出 Desc sorted: 3,2,1
内容的提问来源于stack exchange,提问作者Gauthier
相关产品推荐
相关产品推荐

