2016-09-26 6 views
2

からのオブジェクトの配列を作成します。私はオブジェクト持っているオブジェクトや配列

items = { 
    0: "foo", 
    1: "bar", 
    2: "baz" 
}; 

と配列:

category = [ 
    "type1", 
    "type2", 
    "type3" 
]; 

私が所望の出力でこれらをマージしたい:

newArray = [ 
    {type1:"foo"}, 
    {type2:"bar"}, 
    {type3:"baz"} 
]; 

私は、次のようなforループを使って簡単に行うことができると考えていました(どの方法でも可能です):

var obj = {}; 
for (var i = 0; i < category.length; i++) { 
    obj [category[i]] = items[i]; 
    newArray.push(obj); 
} 

私は何を実際に取得することです:

[{"type1":"foo","type2":"bar","type3":"baz"}, 
{"type1":"foo","type2":"bar","type3":"baz"}, 
{"type1":"foo","type2":"bar","type3":"baz"}] 

私はそれが各objたびしかし、どのように私は所望の出力を得るために改正んためiのすべてのインスタンスを反復処理だと思いますか?

https://jsfiddle.net/ormxq0y4/3/

+0

あなたが期待される出力 –

答えて

1

あなたは、私は、これはそれを行う必要がありますね各反復

for (var i = 0; i < category.length; i++) { 
    var obj = {}; 
    obj [category[i]] = items[i]; 
    newArray.push(obj); 
} 
+0

を投稿してくださいすることができ、この作品理由を説明してください? OPによって提供されたコードの問題点は何ですか? –

+0

@ Md.KhairulHasan説明の明確な部分はありませんか? – charlietfl

+0

それは完璧に動作します。だから、エラーを明確にするために、objがforループの外側で宣言されたとき、それは配列に3回プッシュされるのと同じobjです。ありがとう – fivedoor

1

のための新しいオブジェクトをしたいです。

var items = { 
 
    0: "foo", 
 
    1: "bar", 
 
    2: "baz" 
 
}, 
 
category = [ 
 
    "type1", 
 
    "type2", 
 
    "type3" 
 
], 
 

 
newArray = category.map((e,i) => ({[e]:items[i]})); 
 
console.log(newArray)

+0

ありがとうとなった。これも同様に動作します – fivedoor

0

あなたはこのような何かを試みることができる - ここ>

category.forEach(function (e,i) { 
    var obj = {}; 
    obj[e] = items[i]; 
    newArray.push(obj); 
}); 
0
var items = { 
    0: "foo", 
    1: "bar", 
    2: "baz" 
}, 
category = [ 
    "type1", 
    "type2", 
    "type3" 
]; 

var reformattedArray = category.map(function(obj, index){ 
    var rObj = {}; 
    rObj[obj] = items[index]; 
    return rObj; 
}); 

console.log("reformattedArray", reformattedArray); 

https://jsfiddle.net/s6ntL2eo/

0

を私はそれを行うだろうかです。しかし、私の正直な意見では、項目KEYだけをリレーして配列の接続ポイントにすると少し危険です。オブジェクトでは、キーが別の文字列または数字になることもできることに注意してください(アイテム[+キー]の理由です)。

var items = { 
 
    0: "foo", 
 
    1: "bar", 
 
    2: "baz" 
 
}; 
 

 

 
var categories = [ 
 
    "type1", 
 
    "type2", 
 
    "type3" 
 
]; 
 

 
var newArray = []; 
 

 
categories.forEach(function (category, key) { 
 
    if (items[+key]) { 
 
    var tmpO = {}; 
 
    tmpO[category] = items[+key]; 
 
    newArray.push(tmpO); 
 
    } 
 
}); 
 

 
console.log(newArray)

0

あなたは独立したオブジェクトを毎回行っていません。代わりに、同じオブジェクトを3回押して、この1つのオブジェクトにtype1、type2、type3の各プロパティを追加します。

var obj = {}をループに移動するだけで問題が解決されます。

newArray = []; 
 
    
 
items = { 
 
    0: "foo", 
 
    1: "bar", 
 
    2: "baz" 
 
}; 
 

 
category = [ 
 
    "type1", 
 
    "type2", 
 
    "type3" 
 
]; 
 

 
for (var i = 0; i < category.length; i++) { 
 
    var obj = {}; 
 
    obj[category[i]] = items[i]; 
 
    newArray.push(obj); 
 
} 
 

 
var title = document.getElementById("title"); 
 
title.innerHTML = JSON.stringify(newArray);

結果:[{"type1":"foo"},{"type2":"bar"},{"type3":"baz"}]

関連する問題