Javascript 使用扩展参数创建对象
我正在尝试使用嵌套for循环创建一个新的对象数组。我正在调用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"]
对象。使用扩展参数赋值
方法来创建一个新对象,但我认为问题在于每个项目都有相同的对象键,我只得到循环中最后一个项目的输出。代码如下:
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,简洁的回答!很好,简洁的回答!