2017-03-17 5 views
1

私は前に投稿したことはありませんが、割り当てられたタスクに近づくことに関する情報を探しています。方法論のアプローチ - jsonの文字列/出力

私はフォーム情報を持つページを持っていますが、私はいくつかの簡単なフィールドを持っています。

ページはフォームフィールドのjson文字列を出力し、テキストファイルに書き込みます。

私がする必要があるのは、キー:値を使用して生産環境への取り込みのためのホットフォルダに出力するためのbashスクリプトを記入することです。

"addmore"配列は生成されるファイル名フィールドの数を決定する必要があります。私はこれが動的であることを付け加えるべきです、 "addmore"配列は1つのエントリーを含むかもしれません、または技術的に無限の数までを含むかもしれません。しかし、この数字は変動します。

JSON出力:これは以下のようにファイルに出力する値のペア::どのように私はキーを使用することができます

{"formatcode":"JFM","serialnumber":"555","callletters":"555","rotator":"555","addmore":["555","444","333",""]}

これはトリックを行う必要があります

{"type":"sequential","items":[ 
    {"filename": "/assets/$formatcode/$serialnumber/$addmore1", "description":"First item"}, 
    {"filename": "/assets/$formatcode/$serialnumber/$addmore2", "description": "Second item"}, 
    {"filename": "/assets/$formatcode/$serialnumber/$addmore3", "description": "Third item"} 
]} 
+0

説明は動的で必須ですか?あなたが1の地図なしでそれをどのように作り出すかはわかりません:可能な最大入力数まで「最初の」すべての方法。 「アイテム1」、「アイテム2」ははるかに簡単になります –

+0

良い点 - 説明は重要ではありません。それは動的ではなく、何かを残すことができます。 – fcamp

+0

'addmore'は配列です。値を使用しますか?正確に3つの行を生成することをどのように知っていますか?今ここでは一般的な解決策を探すのではなく、オブジェクトを受け取り、この出力を返す小さな関数を書くのが最善の方法です。 – Thomas

答えて

0

、私はよES6文字列テンプレートを使用して動的なファイル名と説明を作成します。結果オブジェクトはaddmore.lengthitemsである必要があります。data.addmoreに基づいて基本オブジェクトを作成し、開始点({ type: "sequential", items: [] })として作成し、各繰り返しで動的文字列をoutput.itemsにプッシュします。あなたはES6が使用できない場合

const data = { 
    "formatcode":"JFM", 
    "serialnumber":"555", 
    "callletters":"555", 
    "rotator":"555", 
    "addmore":[ 
     "555", 
     "444", 
     "333", 
    ] 
}; 

const desiredOutput = data.addmore.reduce((p, c, index) => { 
    p.items.push({ 
     filename: `/assets/${data.formatcode}/${data.serialnumber}/${c}`, 
     description: `Item ${index + 1}` 
    }); 
    return p; 
}, { 
    type: "sequential", 
    items: [] 
}); 

console.log(desiredOutput); 

、あなたは通常の関数に矢印機能をオンにし、+、連結演算子の代わりの文字列テンプレートを使用することができます。

+0

これは私が必要としているものに非常に近いようです。少し試してみてください。しかし、これは完璧に見えます。私はあなたがここで何をしているのか正確に理解していると信じています。 – fcamp

+1

なぜreduceを使用しますか?地図が簡単ではないですか? – Thomas

+0

@Thomas私が「reduce」を使用する理由は、私が1つを減らしているからです。(「more」、「index」)私はそれがもっと慣用的だと感じます。あなたの 'map'アプローチは同じようにうまくいきます。それらはパフォーマンスに関して同じである可能性が高いです。 "単純さ"に関しては、私は本当に開発者の "単純な"定義に依存していると思います。いずれのソリューションも「複雑」と定義しません。 –

関連する問題