2016-03-31 4 views
1

2名前/値の配列は、単一の名前/値にキーをオブジェクトに変換:jQueryの<code>serializeArray()</code>私のフォーム上を使用している場合、私はこのようになります配列を取得

[{ 
    "name": "name", 
    "value": "1_filename.jpg" 
}, { 
    "name": "caption", 
    "value": "1_caption" 
}, { 
    "name": "name", 
    "value": "2_filename.jpg" 
}, { 
    "name": "caption", 
    "value": "2_caption" 
}, { 
    "name": "name", 
    "value": "3_filename.jpg" 
}, { 
    "name": "caption", 
    "value": "3_caption" 
}, { 
    "name": "name", 
    "value": "4_filename.jpg" 
}, { 
    "name": "caption", 
    "value": "4_caption" 
}] 

しかし、私のコードの残りの部分は何かを期待します以上のように:

[{ 
    "name": "1_filename.jpg", 
    "caption": "1_caption" 
}, { 
    "name": "2_filename.jpg", 
    "caption": "2_caption" 
}, { 
    "name": "3_filename.jpg", 
    "caption": "3_caption" 
}, { 
    "name": "4_filename.jpg", 
    "caption": "4_caption" 
}] 

私はこのような配列やオブジェクトを操作する新たなんだと私は第二の例に似たものに最初に変換するために使われている慣習がすでに存在しているかはわかりません。

私の最初の推測は、2だけ反復し、それらを新しいオブジェクトにプッシュすることです。私は1つずつ繰り返して名前を確認しようとしましたが、名前とキャプションが正しくまとまっていることを確認するのに問題があります。

+0

あなたは 'serializeArray()'を呼び出しますか? –

答えて

1

あなたは、アレイの他のすべての要素を反復処理シングルループでこれを達成することができます。これは明らかに厳格にオブジェクトの順序がnameNされることを前提に接続されてい

var output = []; 
for (var i = 0; i < input.length; i += 2) { 
    output.push({ name: input[i].value, caption: input[i + 1].value }); 
} 

Working example

、captionN、nameN + 1、captionN + 1 ...

この仮定が正しくない場合は、新しいアルファを作成する前に入力データを適切な形式にするために独自のsort()ロジックを実装する必要がありますy。 2によって

+0

ありがとう!最後に、私はこのバージョンを読みやすくしました。 – Dustin

1

ループ、オブジェクトを構築する2つのインデックスにOBJに名前と値を設定し、配列にオブジェクトをプッシュした生データの前にどのように見えるか

var arr = [{ 
 
    "name": "name", 
 
    "value": "1_filename.jpg" 
 
}, { 
 
    "name": "caption", 
 
    "value": "1_caption" 
 
}, { 
 
    "name": "name", 
 
    "value": "2_filename.jpg" 
 
}, { 
 
    "name": "caption", 
 
    "value": "2_caption" 
 
}, { 
 
    "name": "name", 
 
    "value": "3_filename.jpg" 
 
}, { 
 
    "name": "caption", 
 
    "value": "3_caption" 
 
}, { 
 
    "name": "name", 
 
    "value": "4_filename.jpg" 
 
}, { 
 
    "name": "caption", 
 
    "value": "4_caption" 
 
}]; 
 

 
var out = []; 
 
for(var i=0; i<arr.length; i+=2){ 
 
    var obj = {}; 
 
    obj[arr[i].name] = arr[i].value; 
 
    obj[arr[i+1].name] = arr[i+1].value; 
 
    out.push(obj); 
 
} 
 
console.log(out);

関連する問題