2016-09-26 125 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"}] 

我想这是通过迭代的i所有实例,每次每个obj但我怎么修改以获得所需的输出?

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循环之外时,它只是被推到数组的相同的obj 3次?谢谢 – 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

你最好不要让每一次单独的对象。相反,您需要三次推送相同的对象,并将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"}]