ホーム>source

同じ数の要素を持つ2つの配列があり、1対1でマッピングします

const array1 = [1, 3, 2]
const array2 = [U2, U1, U3]

array1&array2から新しい配列(またはマップ)を生成し、このようなものを作成するにはどうすればよいですか?

const result = [[1, U1], [2, U2], [3, U3]]

あなたの答え
  • 解決した方法 # 1

    Array.forEach() を使用することもできます 。その前に、 array1 をソートできます  配列してから、 array2 から対応する値を取得します  接頭辞 U  目的の出力を取得するには:

    const array1 = [1, 3, 2];
    const array2 = ['U2', 'U1', 'U3'];
    const result = [];
    array1.sort(function(a,b){
      return a-b;
    })
    array1.forEach((elem, index) => result.push([elem, array2[array2.indexOf('U'+elem)]]));
    console.log(result);
    
    

    プレフィックスが常に U ではない場合  次に、これを使用することができます:

    const array1 = [1, 3, 2];
    const array2 = ['U2', 'U1', 'U3'];
    const result = [];
    array1.sort(function(a,b){
      return a-b;
    })
    array1.forEach((elem) => {
      var array2Val = array2.find(val => val.indexOf(elem) !== -1);
      result.push([elem, array2Val]);
    });
    console.log(result);
    
    

  • 解決した方法 # 2

    各アイテムの数値で配列をグループ化できます。

    var array1 = [1, 3, 2],
        array2 = ['U2', 'U1', 'U3'],
        result = Object.values([array1, array2].reduce(
            (o, a) => {
                a.forEach(v => {
                    var k = v.toString().match(/\d+$/)[0];
                    (o[k] = o[k] || []).push(v);
                });
                return o;
            },
            Object.create(null)
        ));
        
    console.log(result);
    
    
    .as-console-wrapper { max-height: 100% !important; top: 0; }
    
    

関連記事

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ centos7 - bashシェルスクリプトで最後のマウントポイントを取得する方法