2017-12-22 3 views
3

私はキーのランダムなJSON配列、値がそうのように配列されている値が設定されていますどのようにjson配列からキー/値のすべての組み合わせを生成できますか?

:私はバックのようなリストを取得するよう

json = {foo:[1,2],bar:[3,4],pi:[5]} 

は、どのように私は、キーの任意の数のこれらのパラメータのすべての組み合わせを生成することができます

{foo:1,bar,3,pi:5} 
{foo:1,bar:4,pi:5} 
{foo:2,bar:3,pi:5} 
{foo:2,bar:4,pi:5} 

答えて

7

使用して削減し、各反復のために、新しい順列を生成します。

const json = {foo:[1,2],bar:[3,4],pi:[5, 7], test: [1]}; 
 

 
const results = Object.keys(json).reduce((acc, key) => { 
 
    const newArray = []; 
 
    
 
    json[key].forEach(item => { 
 
    if (!acc || !acc.length) { // First iteration 
 
     newArray.push({[key]: item}); 
 
    } else { 
 
     acc.forEach(obj => { 
 
     newArray.push({...obj, [key]: item}); 
 
     }); 
 
    } 
 
    }); 
 
    
 
    return newArray; 
 
}, []); 
 

 
console.log(results);

+1

私はN個のキーで動作するバージョンを探していますが、キーを事前に知っていません。あなたの例はハードコードされています。 – jas

+0

編集した私の答え – klugjo

+0

何が... objですか?私は私のノードコードで実行すると、私は例外を取得することを見ていない...。私のノードのバージョンはv6.11.2 – jas

関連する問題