55

jQueryで配列を単純に平坦化する方法は? 私は持っている:

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

そして私が欲しい:

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

10 に答える 10

62

jQuery.mapを使用できます。これは、jQuery ライブラリが既に読み込まれている場合に使用する方法です。

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

戻り値

[1, 2, 3, 4, 5, 6, 7]
于 2011-10-24T11:43:10.743 に答える
35

JavaScript の機能を使用します。

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

console.log( Array.prototype.concat.apply([], a) );
//will output [1, 2, 3, 4, 5]
于 2011-10-24T11:52:31.063 に答える
25

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を利用します

于 2012-10-08T08:33:58.067 に答える
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);

flatten 関数がそれを行うべきであり、これには jQuery は必要ありません。これをすべて Firebug にコピーして実行するだけです。

于 2011-10-24T11:49:15.507 に答える
4

使用できますjQuery.map()

callback( value, indexOrKey )各アイテムを処理する関数。関数の最初の引数は値です。2 番目の引数は、配列またはオブジェクト プロパティのインデックスまたはキーです。この関数は、配列に追加する任意の値を返すことができます。返された配列は、結果の配列にフラット化されます。関数内では、これはグローバル (ウィンドウ) オブジェクトを参照します。

于 2011-10-24T11:49:03.493 に答える
1

複数のレベルがある場合は、再帰を使用します。

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);
于 2014-10-16T06:19:25.470 に答える
0

古い質問、私は知っていますが...

私はこれが機能し、高速であることがわかりました:

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

  return b;
}
于 2012-11-28T02:13:45.893 に答える