如何在jQuery中展平数组?

ext*_*.fx 53 javascript arrays jquery flatten

如何在jQuery中简单地展平数组?我有:

[1, 2, [3, 4], [5, 6], 7]
Run Code Online (Sandbox Code Playgroud)

而且我要:

[1, 2, 3, 4, 5, 6, 7]
Run Code Online (Sandbox Code Playgroud)

Mar*_*lde 59

你可以使用jQuery.map,如果你已经加载了jQuery库,那就是这样.

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

返回

[1, 2, 3, 4, 5, 6, 7]
Run Code Online (Sandbox Code Playgroud)

  • 当然,这就是问题所采用的方式,但是,这也只会使一个层次变平. (6认同)

bjo*_*rnd 35

使用JavaScript的力量:

var a = [[1, 2], 3, [4, 5]];

console.log( Array.prototype.concat.apply([], a) );
//will output [1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

  • 如果您只有嵌套一层深度的数组,则该方法有效.如果阵列中的数组中有数组,则不会展平. (3认同)
  • @dnuttle当然,但问题中没有说明这种情况. (2认同)

Xav*_*avi 25

以下是如何使用jquery来展平深层嵌套数组:

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

返回:

[1, 2, 3, 4, 5, 6, 7, 8]
Run Code Online (Sandbox Code Playgroud)

利用jQuery.map以及jQuery.isArray.


dnu*_*tle 11

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);
Run Code Online (Sandbox Code Playgroud)

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


Fab*_*obs 5

要以递归方式展平数组,可以使用本机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;
    }, []);
}
Run Code Online (Sandbox Code Playgroud)

执行

flatten([1, 2, [3, 4, [5, 6]]])
Run Code Online (Sandbox Code Playgroud)

回报

[ 1, 2, 3, 4, 5, 6 ]
Run Code Online (Sandbox Code Playgroud)