2016-12-13 19 views
-2

配列がであり、x[3][1]=1x[2][2]=1に変換したいと思います。コードは、x=[[3,1],[2,12],[3,3]]のような長い配列に対しても機能するはずです。2D配列を配列の疎配列に変換する

+1

あなたの用語が間違っています。 'x = [[3,1]、[2,2]]' *は2次元配列です。あなたが求めているのは、配列の配列を配列の疎配列に変換することです。 –

+0

"配列の配列"は2D配列 –

+0

[[3,1]、[2,2]]をx [3] [1]とx [2] [2]に変換することはまだ可能です –

答えて

0

まだない場合は、新しい配列を繰り返して作成することができます。次に、指定されたインデックスに値を割り当てます。

このソリューションは結果として新しい配列を使用します。あなたは二つの入力取ると仮定すると、

var x = [[3, 1], [2, 12], [3, 3]], 
 
    result = []; 
 

 
x.forEach(function (a) { 
 
    result[a[0]] = result[a[0]] || []; 
 
    result[a[0]][a[1]] = 1; 
 
}); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

1

pos0pos1

for (i in x) 
    if (x[i][0] == pos0 && x[i][1] == pos1) { 
     // Do stuff 
    } 

をだから、基本的に次のようにあなたが行うことができ、各インデックス

0

をチェックします。

var x = [[3,1],[2,12],[3,3]], 
 
    r = x.reduce((p,c) => (p[c[0]] ? p[c[0]][c[1]] = 1 
 
            : p[c[0]] = Array.from({[c[1]]: 1, length: c[1]+1}), 
 
          p),[]); 
 
console.log(r);

0
const x = [[3,1], [2,2]] 

console.log('x =', x) 

// Initialize 1st dimension array 
const y = [] 
for (let i in x) { 
    // Initialize the 2nd dimension array if not exist 
    y[x[i][0]] = y[x[i][0]] || [] 
    // Assign the value to the sparse array 
    y[x[i][0]][x[i][1]] = 1 
} 

console.log('y =', y) 

出力:

x = [ [ 3, 1 ], [ 2, 2 ] ] 
y = [ , , [ , , 1 ], [ , 1 ] ] 
0

あなたの配列を反復処理するためにarray#reduceを使用して、配列が第1の値に対応する存在するかどうかを確認、場合には、それが初期化いないことができます[]と入力し、そのインデックスに値を割り当てます。

var x=[[3,1],[2,12],[3,3]]; 
 
var result = x.reduce((r,[a,b]) => { 
 
    r[a] = r[a] || []; 
 
    r[a][b] = 1; 
 
    return r; 
 
},[]); 
 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

関連する問題