You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 02:08:16