Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.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_Ecmascript 6 - Fatal编程技术网

Javascript 使用扩展参数创建对象

Javascript 使用扩展参数创建对象,javascript,ecmascript-6,Javascript,Ecmascript 6,我正在尝试使用嵌套for循环创建一个新的对象数组。我正在调用对象。使用扩展参数赋值方法来创建一个新对象,但我认为问题在于每个项目都有相同的对象键,我只得到循环中最后一个项目的输出。代码如下: let array1 = ["first", "second", "third", "fourth"]; let array2 = [ [1, "a", "b", "c"], [2, "d", "e", "f"], [3, "g", "h", "i"], [4, "j", "k", "l"]

我正在尝试使用嵌套for循环创建一个新的对象数组。我正在调用
对象。使用扩展参数赋值
方法来创建一个新对象,但我认为问题在于每个项目都有相同的对象键,我只得到循环中最后一个项目的输出。代码如下:

let array1 = ["first", "second", "third", "fourth"];
let array2 = [
  [1, "a", "b", "c"],
  [2, "d", "e", "f"],
  [3, "g", "h", "i"],
  [4, "j", "k", "l"],
  [5, "m", "n", "o"]
];

let matchedVals = [];
let finalVals = [];

for (let j = 0; j < array1.length; j++) {
  for (let i = 0; i < array2.length; i++) {
    matchedVals.push({ [array2[i]]: array1[j][i] })
    finalVals.push(Object.assign(...matchedVals))
  }
}


//End Result Expected
// [
//   {
//     "first": 1,
//     "second": "a",
//     "third": "b",
//     "forth": "c"
//   }, {
//     "first": 2,
//     "second": "d",
//     "third": "e",
//     "forth": "f"
//   }, {
//     "first": 3,
//     "second": "g",
//     "third": "e",
//     "forth": "h"
//   }

//   ...

// ]
让数组1=[“第一”、“第二”、“第三”、“第四”];
设array2=[
[1,“a”、“b”、“c”],
[2,“d”、“e”、“f”],
[3,“g”、“h”、“i”],
[4,“j”、“k”、“l”],
[5,“m”、“n”、“o”]
];
设matchedVals=[];
设finalVals=[];
for(设j=0;j

我确信有些东西很简单,但我对Object还不够熟悉。Assign了解我可以做些什么来解决这个问题。

我不会使用
Object。在这里分配
。创建具有单个属性的对象只是为了将它们合并在一起似乎是浪费。为什么不变异单个对象(每个顶级数组元素)

我会使用
Array#map
Array#reduce
或普通的旧循环:

让数组1=[“第一”、“第二”、“第三”、“第四”];
设array2=[
[1,“a”、“b”、“c”],
[2,“d”、“e”、“f”],
[3,“g”、“h”、“i”],
[4,“j”、“k”、“l”],
[5,“m”、“n”、“o”]
];
const finalResult=array2.map(
values=>values.reduce((obj,val,i)=>(obj[array1[i]]=val,obj),{})
);

控制台日志(最终结果)我不会使用
对象。在此处分配
。创建具有单个属性的对象只是为了将它们合并在一起似乎是浪费。为什么不变异单个对象(每个顶级数组元素)

我会使用
Array#map
Array#reduce
或普通的旧循环:

让数组1=[“第一”、“第二”、“第三”、“第四”];
设array2=[
[1,“a”、“b”、“c”],
[2,“d”、“e”、“f”],
[3,“g”、“h”、“i”],
[4,“j”、“k”、“l”],
[5,“m”、“n”、“o”]
];
const finalResult=array2.map(
values=>values.reduce((obj,val,i)=>(obj[array1[i]]=val,obj),{})
);

控制台日志(最终结果)代码的主要问题是for循环的顺序、使用的数组和索引以及对Object.assign的滥用

比较你的循环

for (let j = 0; j < array1.length; j++) {
    for (let i = 0; i < array2.length; i++) {
        matchedVals.push({ [array2[i]]: array1[j][i] })
        finalVals.push(Object.assign(...matchedVals))
    }
}
for(设j=0;j
用这个

for (let i = 0; i < array2.length; i++) {
    let matchedVals = [];
    for (let j = 0; j < array1.length; j++) {
        matchedVals.push({ [array1[j]]: array2[i][j] })
    }
    finalVals.push(Object.assign({},...matchedVals))
}
for(设i=0;i

然而,@FelixKling的答案是更好的代码-我只是想让你看看你的代码哪里出错了

你的代码的主要问题是for循环的顺序,你在哪个数组上使用哪个索引,以及你对Object.assign的滥用

比较你的循环

for (let j = 0; j < array1.length; j++) {
    for (let i = 0; i < array2.length; i++) {
        matchedVals.push({ [array2[i]]: array1[j][i] })
        finalVals.push(Object.assign(...matchedVals))
    }
}
for(设j=0;j
用这个

for (let i = 0; i < array2.length; i++) {
    let matchedVals = [];
    for (let j = 0; j < array1.length; j++) {
        matchedVals.push({ [array1[j]]: array2[i][j] })
    }
    finalVals.push(Object.assign({},...matchedVals))
}
for(设i=0;i

然而,@FelixKling的答案是更好的代码-我只是想让你看看你的代码哪里出错了

你正在运行Object.assign,对于I的每一次迭代,它看起来都是错误的-同样,Object.assign需要一个目标和一个或多个源-你的目标是什么?我想你把两个数组弄混了你在运行Object.assign时,每次迭代I,这看起来都是错误的-还有,Object.assign需要一个目标和一个或多个源-你的目标是什么?我想你把两个数组弄混了,因为你指出了我代码中的错误。盯着它看了一会儿,我就是看不到它!有时有像
array1
array2
i
j
这样的名字会让人眼花缭乱:感谢你指出我代码中的错误。盯着它看了一会儿,我就是看不到它!有时有像
array1
array2
i
j
这样的名字会让人眼花缭乱:pNice,简洁的回答!很好,简洁的回答!