Steamroller
What is "Streamroller" ?題目的意思我想大家看上面那張圖應該很清楚可以知道是壓路機,而為何此題會以壓路機命名? 原因當然是因為跟題目有關,題目會給一個用多層array包含的一個array裡面包含各種元素,Ex: [1, {}, [3, [[4]]]],像例子所舉的樣子,一個array裡面有好幾層陣列包含,而非我們平常看到的多維陣列(multidimensional array),也就是我們習以為常的空間三維座標那種這列,如果讀者要想像的話,大概就像魔術方塊吧,而此題要求是要找出此array中所有的元素並返回一個平常我們較常使用的一維array(one-dimentional array),把多層的array壓平成一個array,題意由此而來
function steamroller(arr) {
// I'm a steamroller, baby
var newArr = [];
function rollor(emt)
{
emt.forEach(function(emt)
{
if(Array.isArray(emt))
return rollor(emt);
else
newArr.push(emt);
});
}
rollor(arr);
return newArr ;
}
steamroller([1, [2], [3, [[4]]]]);
steamroller([[["a"]], [["b"]]]);
steamroller([1, [2], [3, [[4]]]]);
steamroller([1, [], [3, [[4]]]]);
steamroller([1, {}, [3, [[4]]]]);
測試的正確結果
steamroller([[["a"]], [["b"]]]) 應該返回 ["a", "b"]。steamroller([1, [2], [3, [[4]]]]) 應該返回 [1, 2, 3, 4]。
steamroller([1, [], [3, [[4]]]]) 應該返回 [1, 3, 4]。
steamroller([1, {}, [3, [[4]]]]) 應該返回 [1, {}, 3, 4]。
Solution:
// 下面的函數調用都返回 true
Array.isArray([]);
Array.isArray([1]);
Array.isArray(new Array());
// 鮮為人知的事實:其實 Array.prototype 也是一個數組。
Array.isArray(Array.prototype);
// 下面的函數調用都返回 false
Array.isArray();
Array.isArray({});
Array.isArray(null);
Array.isArray(undefined);
Array.isArray(17);
Array.isArray('Array');
Array.isArray(true);
Array.isArray(false);
Array.isArray({ __proto__: Array.prototype });
P.S. / Reference: Array.isArray()