FCC 中级算法题 数组扁平化

Steamroller


对嵌套的数组进行扁平化处理。你必须考虑到不同层级的嵌套。

Array.isArray()

思路:

(1)遍历arr,如果arr[i]是数组,就重新调用本函数继续循环,然后和新数组连接;

(2)如果不是数组,就直接添加进新数组;

知识点:

(1)Array.concat()方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组;

(2)Array.push()方法将一个或多个元素添加到数组的末尾,并返回数组的新长度;

(3)Array.isArray()用于确定传递的值是否是一个 Array

代码:

 1 function steamroller(arr) {
 2   var newArr=[];
 3   for(var i=0;i<arr.length;i++){
 4     if(Array.isArray(arr[i])){
 5       //如果是数组,就重新调用本函数继续循环,然后和新数组连接
 6      newArr=newArr.concat(steamroller(arr[i]));
 7     }else{
 8      //如果不是数组,就直接添加进新数组
 9      newArr.push(arr[i]);
10     }
11   }
12   return newArr;
13 }
14 steamroller([1, [2,222,[22,[2,[2]]]], [3, [[4]]]]);
时间: 2024-08-09 14:46:47

FCC 中级算法题 数组扁平化的相关文章

FCC 中级算法题 比较两个数组

Diff Two Arrays 比较两个数组,然后返回一个新数组,该数组的元素为两个给定数组中所有独有的数组元素.言之,返回两个数组的差异. ComparisonOperators Array.slice() Array.filter() Array.indexOf() Array.concat() 思路: 先找出arr1中与arr2不同的部分组成新数组1,再找出arr2中与arr1不同的部分组成新数组2,在将这两个数组合并,得出两个数组不同的部分. 知识点: (1)var newArr=arr

FCC 中级算法题 Binary Agents

Binary Agents 传入二进制字符串,翻译成英语句子并返回. 二进制字符串是以空格分隔的. String.charCodeAt() String.fromCharCode() 思路: (1)把字符串转化为数组: (2)把数组中的二进制转化为十进制: (3)把数组中的十进制数字转化为字母: (4)把数组转化为字符串: 知识点 (1)String.split()方法将一个String对象分割成字符串数组,通过将字符串分成子串; (2)parseInt(string,num) num代表num

FCC 中级算法题 找到缺失的字母

Missing letters 从传递进来的字母序列中找到缺失的字母并返回它. 如果所有字母都在序列中,返回 undefined. String.charCodeAt() String.fromCharCode() 思路: (1)直接将字符串转化为数字按顺序放入数组arr中; (2)如果没有缺失的字母,数组的最大值减最小值加1应该等于数组的长度,利用这一特点,创建这样一个理想的没有缺失的数组newArr; (3)从newArr中剔除与数组arr相同的元素,这样就找到了丢失字母的数字,由于可能不止

FCC 中级算法题 对所有的数字求和

题干: 我们会传递给你一个包含两个数字的数组.返回这两个数字和它们之间所有数字的和. 最小的数字并非总在最前面. 1 function sumAll(arr) { 2 return 1; 3 } 4 5 sumAll([1, 4]); 会用到的函数 Math.max() Math.min() Array.reduce() 思路: (1)通过Math.max(),Math.min()抽出数组中的最大值max和最小值min: (2)创建新数组获取最小值和最大值之间的数值: (3)利用Array.re

FCC 中级算法题 碱基配对

DNA Pairing DNA 链缺少配对的碱基.依据每一个碱基,为其找到配对的碱基,然后将结果作为第二个数组返回. Base pairs(碱基对) 是一对 AT 和 CG,为给定的字母匹配缺失的碱基. 在每一个数组中将给定的字母作为第一个碱基返回. 例如,对于输入的 GCG,相应地返回 [["G", "C"], ["C","G"],["G", "C"]] 字母和与之配对的字母在一个数组

fcc中级算法题

1 Sum All Numbers in a Range 我们会传递给你一个包含两个数字的数组.返回这两个数字和它们之间所有数字的和. 最小的数字并非总在最前面. 如果你被难住了,记得使用 Read-Search-Ask.尝试与他人结伴编程.编写你自己的代码. 这是一些对你有帮助的资源: Math.max() Math.min() Array.reduce()

FCC 中级算法题 Drop it

Drop it 让我们来丢弃数组(arr)的元素,从左边开始,直到回调函数return true就停止. 第二个参数,func,是一个函数.用来测试数组的第一个元素,如果返回fasle,就从数组中抛出该元素(注意:此时数组已被改变),继续测试数组的第一个元素,如果返回fasle,继续抛出,直到返回true. 最后返回数组的剩余部分,如果没有剩余,就返回一个空数组. Arguments object Array.shift() Array.slice() 思路: (1)先获得数组的长度(在后面的循

FCC 中级算法题 Finders Keepers

Finders Keepers 写一个 function,它遍历数组 arr,并返回数组中第一个满足 func 返回值的元素.举个例子,如果 arr 为 [1, 2, 3],func 为 function(num) {return num === 2; },那么 find 的返回值应为 2. Array.filter() 没有用到filter,感觉用了之后更麻烦了 代码: 1 function find(arr, func) { 2 3 for(var i=0;i<arr.length;i++)

FCC 中级算法题 Everything Be True

Everything Be True 所有的东西都是真的! 完善编辑器中的every函数,如果集合(collection)中的所有对象都存在对应的属性(pre),并且属性(pre)对应的值为真.函数返回ture.反之,返回false. 记住:你只能通过中括号来访问对象的变量属性(pre). Array.prototype.every(). 知识点: Array.prototype.every()方法测试数组的所有元素是否都通过了指定函数的测试. 代码: 1 function every(coll