谈到数组操作方法和递归思想,突然想起几年前一位来自百度的工程师出的面试题,感觉挺符合今天的主题,现与各位分享。
面试题是这样的,将任意嵌套数组拆分成一个包含数组里元素的数组,最终得到的数组不能包含数组元素。说起来,有点绕哈,现用JavaScript语言来举例说明。
比如定义var s = [2,["cc"],[2,"a",[1,"c",[2,"a",[1,"c"]]]],[1,"aa","bb"],[23, 65, 98, 5]];如何数组中的嵌套数组中的元素全部取出,并放入一个新数组var new_s = [];并保证new_s中不再存在一个数组元素呢?
现在让我们来定义一个通用方法
function expandArray(arr) { arr.forEach(function(item,i,list){
if (Array.isArray(item)) {expandArray(item);
}else {
new_s.push(item);
}
});
}
expandArray(s);
console.log(s);
console.log(new_s);
通用方法expandArray在遍历待处理数组时,逻辑判断里采用了递归调用的思想,精炼地阐述了数组遍历与递归思想的妙用。