Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从对象和数组创建对象数组_Javascript_Arrays_For Loop - Fatal编程技术网

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;ititle.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);