JavaScript 遍历嵌套数组与生成子集的两种实现方式

作者:闭包旅人

时间:2026-10-30

浏览:342

本文详解 JavaScript 中遍历嵌套数组的递归方法,通过 for...in 循环处理子集并提取特定字段。同时介绍利用二进制位运算生成不含重复元素整数数组所有子集(幂集)的算法思路与代码实现,涵盖从基础遍历到进阶算法的完整场景。

文章目录

JavaScript 遍历包含子集的数组集合

在 JavaScript 中主要存在两种 for 循环结构:

for(var i in obj)
for(var i=0;i<obj.length;i++)

两者的区别如下:

for(var i in obj)

  • 第一种为增强型 for 循环(for...in),它是一种不使用索引下标的遍历方式,具有简单高效的优点,但缺点是无法直接获取当前元素的索引值。
  • 若需遍历 JSON 对象,建议使用第一种方式。
  • 若需遍历数组对象,建议使用第二种方式。

for(var i in obj)

  • 1. 遍历数组时,i 代表索引值,arr[i] 表示该索引对应的元素值。
  • 2. 遍历字符串时,i 代表索引值,arr[i] 表示该索引对应的字符。
  • 3. 遍历 JSON 对象时,i 代表键名(冒号前的值),json[i] 代表键对应的值(冒号后的值)。

针对嵌套数组的遍历,通常采用递归方式来判断和处理子集。

traversal(dataInfo)//dataInfo是要循环遍历的集合
//遍历方法
function traverse(data) {
            for (var i in data) {
                if (data[i].children) {
                    traverse(data[i].children)
                }
                if (!data[i].children.length) {
                    delete data[i].children;
                }
            }
        }

假设存在如下数据结构集合:

JavaScript 遍历包含子集的数组集合

目标是获取集合中每个节点的 Name 属性并输出。

具体实现代码如下:

traversal(dataInfo)//dataInfo是要循环遍历的集合
//遍历方法
function traverse(data) {
            for (var i in data) {
                alert(data[i].Name)
                if (data[i].children) {
                    traverse(data[i].children)
                }
                if (!data[i].children.length) {
                    delete data[i].children;
                }
            }
        }

使用 JavaScript 找出给定数组的所有子集

题目描述

给定一个不包含重复元素的整数数组 nums,要求返回该数组所有可能的子集(即幂集)。

约束条件:解集中不能包含重复的子集。

解题思路

  • 采用二进制位运算思路:全 0 状态对应空集,全 1 状态对应全集。
  • 根据数组长度确定二进制数的位数。
  • 遍历二进制数的各个位,利用按位与操作符判断是否包含当前元素,从而生成数组的子集。

解题代码

/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var subsets = function(nums) {
    let res = [], len = nums.length;
    for (let i = 0; i < (1 << len); i++) {
        let arr = [];
        for (let j = 0; j < len; j++) {
            if (i & (1 << j)) arr.push(nums[j]);
        }
        res.push(arr);
    }
    return res;
};

总结

以上为个人经验总结,希望能给大家提供参考,也希望大家多多支持本站。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章