web-dev-qa-db-ja.com

jQueryで配列をフラット化する方法は?

JQueryで配列を単純化する方法は?私が持っています:

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

そして私は欲しい:

[1, 2, 3, 4, 5, 6, 7]
53
extern.fx

jQuery.map を使用できます。これは、jQueryライブラリがすでにロードされている場合に使用する方法です。

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

戻り値

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

JavaScriptの力を利用する:

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

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

次に、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 を利用します。

25
Xavi
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にコピーして実行します。

11
dnuttle

配列を再帰的にフラット化するには、ネイティブの 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 ]
5
Fabian Jakobs

jQuery.map() を使用できます:

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

4
Sarfraz

技術的にはjQueryではなく、有効なES5であるArray.prototype.reduceを使用できます。

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);
1
Elise Chant

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

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);
1
Udai Arora

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

私はこれがうまくいくことを発見し、高速です:

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

  return b;
}
0
phil

必要です arr.flat([depth])

var arr1 = [1, 2, [3, 4]];
arr1.flat(); 
// [1, 2, 3, 4]

var arr2 = [1, 2, [3, 4, [5, 6]]];
arr2.flat();
// [1, 2, 3, 4, [5, 6]]

var arr3 = [1, 2, [3, 4, [5, 6]]];
arr3.flat(2);
// [1, 2, 3, 4, 5, 6]
0
Eugen Konkov