如何在jQuery中压扁数组?

如何在jQuery中简化数组? 我有:

[1, 2, [3, 4], [5, 6], 7] 

而且我要:

 [1, 2, 3, 4, 5, 6, 7] 

您可以使用jQuery.map ,如果您已经加载了jQuery库,那么这是一种方法。

 $.map( [1, 2, [3, 4], [5, 6], 7], function(n){ return n; }); 

返回

 [1, 2, 3, 4, 5, 6, 7] 

使用JavaScript的力量:

 var a = [[1, 2], 3, [4, 5]]; console.log( Array.prototype.concat.apply([], a) ); //will output [1, 2, 3, 4, 5] 

以下是如何使用jquery将深度嵌套的数组展平:

 $.map([1, 2, [3, 4], [5, [6, [7, 8]]]], function recurs(n) { return ($.isArray(n) ? $.map(n, recurs): n); }); 

返回:

 [1, 2, 3, 4, 5, 6, 7, 8] 

利用jQuery.map以及jQuery.isArray 。

 var a = [1, 2, [3, 4], [5, [6, [7, 8]]]]; var b = []; function flatten(e,b){ if(typeof e.length != "undefined") { for (var i=0;i<e.length;i++) { flatten(e[i],b); } } else { b.push(e); } } flatten(a,b); console.log(b); 

flatten函数应该这样做,这不需要jQuery。 只需将所有这些复制到Firebug并运行即可。

要recursion地平铺一个数组,你可以使用本地的Array.reduce函数。 这是没有必要使用jQuery的。

 function flatten(arr) { return arr.reduce(function flatten(res, a) { Array.isArray(a) ? a.reduce(flatten, res) : res.push(a); return res; }, []); } 

执行

 flatten([1, 2, [3, 4, [5, 6]]]) 

回报

 [ 1, 2, 3, 4, 5, 6 ] 

你可以使用jQuery.map()

callback(value,indexOrKey)处理每个项目的函数。 函数的第一个参数是值; 第二个参数是数组或对象属性的索引或键。 该函数可以返回任何值以添加到数组中。 返回的数组将被拼合成结果数组 。 在函数内,这是指全局(窗口)对象。

你可以使用Array.prototype.reduce ,这在技术上不是jQuery,而是有效的ES5:

 var multidimensionArray = [1, 2, [3, 4], [5, 6], 7]; var initialValue = []; var flattened = multidimensionArray.reduce(function(accumulator, current) { return accumulator.concat(current); }, initialValue); console.log(flattened); 

老问题,我知道,但…

我发现这个作品,速度很快:

 function flatten (arr) { b = Array.prototype.concat.apply([], arr); if (b.length != arr.length) { b = flatten(b); }; return b; } 

如果您有多个级别,请使用recursion:

 flaten = function(flatened, arr) { for(var i=0;i<arr.length;i++) { if (typeof arr[i]!="object") { flatened.push(arr[i]); } else { flaten(flatened,arr[i]); } } return; } a=[1,[4,2],[2,7,[6,4]],3]; b=[]; flaten(b,a); console.log(b);