您好!欢迎访问家园网-www.jy.wang!

家园网

筛选能被5整除的数,并用分号拼接成字符串

网络 作者:本站 点击:

筛选能被5整除的数,并用分号拼接成字符串

    var returnStr;
    returnStr="";
    for(var i=0;i<intArray.length;i++)
    {
        if(parseInt(intArray[i])%5==0)    //能否被5整除
        {
            if(returnStr!="")
                returnStr+=";";
            returnStr+=intArray[i];      //将能被5整除的数字拼接成字符串
        }
    }

这几行代码是 worker.js 中的核心逻辑:筛选能被5整除的数,并用分号拼接成字符串。让我详细解释每一部分:

代码逐行解析

var returnStr;          // 声明一个变量,用于存储结果字符串
returnStr = "";         // 初始化为空字符串
  • 准备一个空字符串,用来收集所有符合条件的数字

  • 初始为空,便于后续判断是否是第一个数字

for(var i = 0; i < intArray.length; i++)    // 遍历整个数组
  • 循环遍历从父线程传来的整数数组

  • intArray.length 是100(因为生成了100个随机数)

{
    if(parseInt(intArray[i]) % 5 == 0)    // 检查能否被5整除
  • parseInt(intArray[i]) 确保当前元素是整数(虽然已经是整数,但做类型安全)

  • % 5 是取模运算,求除以5的余数

  • % 5 == 0 表示能被5整除(余数为0)

  • 例如:5、10、15、20...都能被5整除

    {
        if(returnStr != "")    // 如果不是第一个数字
            returnStr += ";";   // 先添加分号分隔符
        returnStr += intArray[i];  // 将数字追加到字符串末尾
    }
}

执行过程示例

假设 intArray = [45, 23, 67, 50, 89, 35, 12, 75, 90, 11, ...]

循环处理过程:

初始状态: returnStr = ""
i=0: intArray[0]=45, 45%5=0 ✓
     returnStr为空 → 不加分号
     returnStr = "45"
i=1: intArray[1]=23, 23%5=3 ✗ 跳过
i=2: intArray[2]=67, 67%5=2 ✗ 跳过
i=3: intArray[3]=50, 50%5=0 ✓
     returnStr不为空 → 加分号";"
     returnStr = "45;50"
i=4: intArray[4]=89, 89%5=4 ✗ 跳过
i=5: intArray[5]=35, 35%5=0 ✓
     returnStr不为空 → 加分号";"
     returnStr = "45;50;35"
... 继续循环
最终结果: "45;50;35;75;90;..."

字符串拼接的细节

为什么要用分号分隔?

// 用分号分隔的结果
"45;50;35;75;90"
// 如果没有分隔符
"4550357590"  // 无法区分是45,50,35还是455,0,35...
// 用其他分隔符
"45,50,35,75,90"  // 也可以用逗号,但原代码选择分号

为什么要有 if(returnStr!="") 判断?

// 如果没有这个判断,第一个数字前也会加分号
returnStr = "";           // 初始空
returnStr += ";"; + "45"  // 结果: ";45"  ← 开头多一个分号
// 有判断的逻辑
returnStr = "";           // 初始空
if(returnStr != "")       // false,不加分号
returnStr += "45"         // 结果: "45"  ← 正确

完整的工作流程

// worker.js
onmessage = function(event) {
    // 1. 接收并解析数据
    var intArray = JSON.parse(event.data);  // [45,23,67,50,89,35,...]
    
    // 2. 准备结果字符串
    var returnStr = "";
    
    // 3. 遍历筛选能被5整除的数
    for(var i = 0; i < intArray.length; i++) {
        if(parseInt(intArray[i]) % 5 == 0) {
            if(returnStr != "")
                returnStr += ";";
            returnStr += intArray[i];
        }
    }
    
    // 4. 返回结果
    postMessage(returnStr);  // 发送如 "45;50;35;75;90" 的字符串
    
    // 5. 关闭线程
    close();
}

最终结果示例

假设随机生成的数组包含以下能被5整除的数:

  • 第3个元素:45

  • 第7个元素:50

  • 第12个元素:35

  • 第18个元素:75

  • 第25个元素:90

  • 第31个元素:60

  • 第42个元素:85

  • 第56个元素:95

  • 第63个元素:40

  • 第78个元素:55

最终 returnStr 会是:

"45;50;35;75;90;60;85;95;40;55"

这种做法的优缺点

优点:

  1. 简单直观:字符串拼接逻辑清晰

  2. 内存高效:不需要创建中间数组

  3. 传输方便:一个字符串比数组更容易传输

缺点:

  1. 需要解析:接收端需要用 split(";") 拆分成数组

  2. 不易修改:如果需要添加/删除元素,需要重新构建字符串

在HTML中的使用

// 主线程接收后
worker.onmessage = function(event) {
    // event.data = "45;50;35;75;90"
    var intArray = event.data.split(";");  // 拆分成数组
    // intArray = ["45","50","35","75","90"]
}

这种字符串拼接的方式在Web Worker通信中很常见,特别是在需要传递简单数据列表时,比传递数组对象更轻量。

标签: