2017-11-23 17 views
0

私は私のサーバから応答を受け取ったオブジェクトと配列を持っています。私はウェブサイトの価値を印刷するために、それを第二のフォーマットに変換する必要があります。これはオブジェクトのマッピングを行う必要がありますか?またはJSONを解析するか、親切に助けてください。2つのオブジェクトのマッピングとjavascriptの配列

{"header":["SEOUL","BUSAN","NAMPODONG"],"data":[[38,"CAPITAL","M31"]]}、コード上

'{"SEOUL" : "38", "BUSAN" : "CAPITAL", "NAMPODONG" : "M31"}' 

var finalObj = {}; 
response.header.forEach(function(item, index) { 
finalObj[item] = response.data[0][index]; 
}); 

上方から下方に

変換は、ヘッダーに可変ループを作成し、その値を取得するように正常に動作し、HTMLで印刷されます。ヘッダーとデータはサーバーからのものなので、何かを入力すると "A"と表示され、次にSEOULヘッダーが検索され、html形式で38が表示されます。

キー値:

ヘッダ:ソウルBUSAN南浦洞

データ:38 CAPITAL M31

Iは、データベース内のデータの多くを持っているが、上記の一例に過ぎません。だから私はBを入力して、データベースにないので、私は値が "見つかりませんでした" htmlで見てみたいが、このコードは何も進んでいないかどうかは分かりません。

+0

ですか? –

+0

フィルタ機構が必要です。フィルターはどのように機能しますか? 'A'が最初のオブジェクトを選択するのはなぜですか? –

答えて

3

あなたが望むキーで新しいオブジェクトをマップすることができ

var myObj = { 
 
    "header": ["SEOUL", "BUSAN", "NAMPODONG"], 
 
    "data": [ 
 
    [38, "CAPITAL", "M31"] 
 
    ] 
 
} 
 
var tempObj = {}; 
 
myObj.header.forEach(function(item, index) { 
 
    tempObj[item] = myObj.data[0][index] 
 

 

 
}) 
 
console.log(tempObj)

+0

'data'はおそらくもっと多くのエントリを持っています。 –

+0

ありがとうございました! :-) @brk – HelloWorld

0

その値を取得するために、各キーとobject.data[0]を取得するためにobject.header上の変数&ループを作成します。

データは実際には配列が1つのみの入れ子配列であるため、結果はオブジェクトを含む配列になります。しかし、データには複数の行が含まれている可能性があります。

var data = { header: ["SEOUL", "BUSAN", "NAMPODONG"], data: [[38, "CAPITAL", "M31"]] }, 
 
    result = data.data.map(a => Object.assign(...data.header.map((k, i) => ({ [k]: a[i] })))); 
 

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

+0

ありがとうございました! :-) – HelloWorld

0

あなたはheader配列のキーとして文字列を使用して、オブジェクトの別の配列に配列のdata配列をマッピングすることができますあなたのよう

function transform(obj) { 
 
    return obj.data.map(function(subArray) {    // for each subArray in the data array 
 
    return subArray.reduce(function(o, val, i) {  // create a new object o which... 
 
     o[ obj.header[i] ] = val;      // has key-value pairs where value is the current element of subArray and key is its equivalent (item at the same index) from header array 
 
     return o; 
 
    }, {}); 
 
    }); 
 
} 
 

 

 
var obj = {"header":["SEOUL","BUSAN","NAMPODONG"],"data":[[38,"CAPITAL","M31"], [10,"OTHER","M01"]]}; 
 
var result = transform(obj); 
 

 
console.log(result);

+0

これは素晴らしい仕事です。ありがとう。 – HelloWorld

+0

@HelloWorldわかりません。あなたはそれについてもっと詳しく説明できますか?おそらく、コメントが助けにならないので、明確にするために質問を編集することになります。 –

+0

私は私の質問で編集しました。ありがとう@ ibrahim mahrir – HelloWorld

2

サーバーから受け取った - IそれがJSON文字列であると仮定します。

基本的には、オブジェクトにreduceとしたい2つの配列があります。 だから私はこのようにそれを行うだろう:私はdata属性のネストされた配列は、フォーマット間違いのいくつかの種類であると仮定

const object = JSON.parse('{"header":["SEOUL","BUSAN","NAMPODONG"],"data":[[38,"CAPITAL","M31"]]}'); 
 

 
const result = object.header.reduce(function(accumulator, element, i){ 
 
    accumulator[element] = object.data[0][i] // You had nested array here so I have to get first element. 
 
    return accumulator; 
 
}, {}); 
 
console.log(result);

。そうでない場合は、最初に要素であるにもかかわらず、減らす必要がありますが、mapにする必要があります。

+0

これは素晴らしい仕事です。ありがとう。 – HelloWorld

0

私は、彼らがそうであるように上記の応答が優れていると思いますが、ここであなたはそれあなたはRAMDAからzipObjを使用することができます

var response = { 
 
    "header": ["SEOUL", "BUSAN", "NAMPODONG"], 
 
    "data": [ 
 
    [38, "CAPITAL", "M31"] 
 
    ] 
 
}; 
 

 
var result = response.header.reduce(function(accum, v, i) { 
 
    accum[v] = response.data[0][i]; 
 
    return accum; 
 
}, {}) 
 

 
console.log(result)

2

について知らなかった場合に減らす使用する代替ですとしょうかん。

コードは次のようになります。それは、オブジェクトまたはJSON文字列

const res = {"header":["SEOUL","BUSAN","NAMPODONG"],"data":[[38,"CAPITAL","M31"]]} 
 

 
const obj = R.zipObj(res.header, res.data[0]) 
 
console.log(obj)
<script src="//cdn.jsdelivr.net/npm/[email protected]/dist/ramda.min.js"></script>

関連する問題