JavaScript 遍历嵌套数组与生成子集的两种实现方式
作者:闭包旅人时间:2026-10-30 21:11:14浏览:343
本文详解 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;
}
}
}假设存在如下数据结构集合:

目标是获取集合中每个节点的 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;
};总结
以上为个人经验总结,希望能给大家提供参考,也希望大家多多支持本站。
作者最新文章
什么时候该用JS构造器:与工厂模式、字面量的选择对比
2026-11-05 16:18:22
推荐几款轻量级JS照片墙开源库及对比
2026-11-05 15:56:19
JavaScript递归写法有哪些常见陷阱及避免方法
2026-11-05 14:53:38
JS数组浅拷贝与深拷贝怎么选?场景与方法总结
2026-11-05 14:41:02
p5.js 中 setup() 和 draw() 函数的执行机制详解
2026-11-05 12:32:38
相关标签:
