Javascript 从对象和数组创建对象数组
我有一个目标:Javascript 从对象和数组创建对象数组,javascript,arrays,for-loop,Javascript,Arrays,For Loop,我有一个目标: items = { 0: "foo", 1: "bar", 2: "baz" }; 和一个数组: category = [ "type1", "type2", "type3" ]; 我想将这些与所需的输出合并: newArray = [ {type1:"foo"}, {type2:"bar"}, {type3:"baz"} ]; 我认为我可以通过如下的for循环非常简单地做到这一点(尽管任何方法都可以
items = {
0: "foo",
1: "bar",
2: "baz"
};
和一个数组:
category = [
"type1",
"type2",
"type3"
];
我想将这些与所需的输出合并:
newArray = [
{type1:"foo"},
{type2:"bar"},
{type3:"baz"}
];
我认为我可以通过如下的for循环非常简单地做到这一点(尽管任何方法都可以做到):
我猜它每次都在对每个obj
迭代I
的所有实例,但是如何修改以获得所需的输出呢
每次迭代都需要一个新对象
for (var i = 0; i < category.length; i++) {
var obj = {};
obj [category[i]] = items[i];
newArray.push(obj);
}
for(var i=0;i
我想应该这样做
var项目={
0:“foo”,
1:“酒吧”,
2:“baz”
},
类别=[
“类型1”,
“类型2”,
“类型3”
],
newArray=category.map((e,i)=>({[e]:items[i]}));
log(newArray)
您可以尝试以下方法->
category.forEach(function (e,i) {
var obj = {};
obj[e] = items[i];
newArray.push(obj);
});
以下是我将如何做到这一点。但是,在我看来,如果您仅依赖items键作为阵列的连接点,则有点冒险。还请记住,对象允许键为更大的字符串或数字(这就是为什么items[+key])
var项目={
0:“foo”,
1:“酒吧”,
2:“baz”
};
变量类别=[
“类型1”,
“类型2”,
“类型3”
];
var newArray=[];
类别.forEach(函数(类别,键){
如果(项目[+键]){
var tmpO={};
tmpO[类别]=项目[+键];
newArray.push(tmpO);
}
});
console.log(newArray)
您并不是每次都创建一个单独的对象。而是将同一对象推三次,并将type1、type2、type3属性添加到此对象
只需将var obj={}
移动到循环中即可解决问题
newArray=[];
项目={
0:“foo”,
1:“酒吧”,
2:“baz”
};
类别=[
“类型1”,
“类型2”,
“类型3”
];
对于(var i=0;i title.innerHTML=JSON.stringify(newArray)代码>你能发布你的预期结果吗?请解释为什么这样做?OP.@Md.KhairulHasan提供的代码中有什么问题?解释的哪一部分不清楚?谢谢,这很好。所以要澄清的错误是,当obj在for循环外声明时,它只是同一个obj,被推送到数组3次?谢谢…您总是向同一对象添加新属性,并且每次都将同一对象引用推入数组。因此,所有元素最终都是完全相同的对象
for (var i = 0; i < category.length; i++) {
var obj = {};
obj [category[i]] = items[i];
newArray.push(obj);
}
category.forEach(function (e,i) {
var obj = {};
obj[e] = items[i];
newArray.push(obj);
});
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);