本文详解 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;
};总结
以上为个人经验总结,希望能给大家提供参考,也希望大家多多支持本站。