Javascript 如何使用另一个对象数组的键和数组中的值来构造对象数组?
我有两个数组,如下所示。我试图通过使用array_1中的Javascript 如何使用另一个对象数组的键和数组中的值来构造对象数组?,javascript,arrays,ecmascript-6,Javascript,Arrays,Ecmascript 6,我有两个数组,如下所示。我试图通过使用array_1中的字段键和array_2中的值来创建一个新的对象数组 const result = [] array_1 = [{ name: "Color" , field: "color"}, {name: "Shape", field: "shape" }, { name: "Whatever", field: "whatever"
字段
键和array_2中的值来创建一个新的对象数组
const result = []
array_1 = [{ name: "Color" , field: "color"}, {name: "Shape", field: "shape" }, { name: "Whatever", field: "whatever" }]
array_2 = [["green", "rectangular", "whatever1"], ["yellow", "circle", "whatever2"]]
结果应该是:
console.log(result)
// [{color:"green", shape:"rectangular", whatever: "whatever1"},
// { color:"yellow", shape: "circle", whatever:"whatever2"}]
我在最后的审判中这样做了:
const rowObj = {}
const result = array.map((subarray) => subarray.map((cell, index) => {
console.log(cell,index)
rowObj[columns[index].field] = cell
return rowObj
}))
基本上,我是在覆盖同一个对象
谢谢,您可以使用迭代这两个数组,并利用来基于数组元素的顺序构建新对象:
array_1=[{name:“Color”,field:“Color”},{name:“Shape”,field:“Shape”},{name:“Whatever”,field:“Whatever”}]
数组_2=[[“绿色”、“矩形”、“whatever1”]、[“黄色”、“圆形”、“whatever2”]]
让结果=数组_2.map(
x=>Object.fromEntries(
数组_1.map((y,i)=>([y.field,x[i]]))
控制台日志(结果)代码>您可以使用迭代这两个数组,并利用来基于数组元素的顺序构建新对象:
array_1=[{name:“Color”,field:“Color”},{name:“Shape”,field:“Shape”},{name:“Whatever”,field:“Whatever”}]
数组_2=[[“绿色”、“矩形”、“whatever1”]、[“黄色”、“圆形”、“whatever2”]]
让结果=数组_2.map(
x=>Object.fromEntries(
数组_1.map((y,i)=>([y.field,x[i]]))
控制台日志(结果)
一种方法是在数组上映射()
,并在每次迭代中:
创建一个新对象
迭代数组_1
以填充新创建的对象。您可以使用forEach()
方法的回调函数的index参数,从array\u 1
中的对象获取字段
属性
然后从map()
方法的回调函数返回该对象
const数组_1=[
{name:'Color',field:'Color'},
{name:'Shape',字段:'Shape'},
{name:'whater',字段:'whater'},
];
常量数组_2=[
[‘绿色’、‘长方形’、‘任意形状’],
['yellow'、'circle'、'whatever2'],
];
const result=array_2.map(arr=>{
常数o={};
arr.forEach((str,idx)=>{
o[array_1[idx].field]=str;
});
返回o;
});
控制台日志(结果)
一种方法是在数组上映射()
,并在每次迭代中:
创建一个新对象
迭代数组_1
以填充新创建的对象。您可以使用forEach()
方法的回调函数的index参数,从array\u 1
中的对象获取字段
属性
然后从map()
方法的回调函数返回该对象
const数组_1=[
{name:'Color',field:'Color'},
{name:'Shape',字段:'Shape'},
{name:'whater',字段:'whater'},
];
常量数组_2=[
[‘绿色’、‘长方形’、‘任意形状’],
['yellow'、'circle'、'whatever2'],
];
const result=array_2.map(arr=>{
常数o={};
arr.forEach((str,idx)=>{
o[array_1[idx].field]=str;
});
返回o;
});
控制台日志(结果)代码>您可以试试这个
array_1 = [
{ name: 'Color', field: 'color' },
{ name: 'Shape', field: 'shape' },
{ name: 'Whatever', field: 'whatever' }
];
array_2 = [
['green', 'rectangular', 'whatever1'],
['yellow', 'circle', 'whatever2']
];
const keys = array_1.map(item => item.field);
const output = [];
array_2.forEach(item => {
const temp = {};
for (let i = 0; i < keys.length; i++) {
const key = keys[i];
const value = item[i];
temp[key] = value;
}
output.push(temp);
});
console.log(output);
数组_1=[
{name:'Color',field:'Color'},
{name:'Shape',字段:'Shape'},
{name:'whater',字段:'whater'}
];
数组_2=[
[‘绿色’、‘长方形’、‘任意形状’],
[‘黄色’、‘圆圈’、‘其他什么’]
];
constkeys=array_1.map(item=>item.field);
常量输出=[];
数组_2.forEach(项=>{
常数temp={};
for(设i=0;i
您可以试试这个
array_1 = [
{ name: 'Color', field: 'color' },
{ name: 'Shape', field: 'shape' },
{ name: 'Whatever', field: 'whatever' }
];
array_2 = [
['green', 'rectangular', 'whatever1'],
['yellow', 'circle', 'whatever2']
];
const keys = array_1.map(item => item.field);
const output = [];
array_2.forEach(item => {
const temp = {};
for (let i = 0; i < keys.length; i++) {
const key = keys[i];
const value = item[i];
temp[key] = value;
}
output.push(temp);
});
console.log(output);
数组_1=[
{name:'Color',field:'Color'},
{name:'Shape',字段:'Shape'},
{name:'whater',字段:'whater'}
];
数组_2=[
[‘绿色’、‘长方形’、‘任意形状’],
[‘黄色’、‘圆圈’、‘其他什么’]
];
constkeys=array_1.map(item=>item.field);
常量输出=[];
数组_2.forEach(项=>{
常数temp={};
for(设i=0;i
说明
您可以创建一个函数,该函数根据对象字段的描述创建构造函数,如下所示:
函数createConstructor(fieldsDescriptor){
返回函数(字段){
fieldsDescriptor.forEach((描述符,索引)=>{
此[descriptor.field]=字段[index]
})
}
}
然后,例如,您可以创建一个sampleConstructor,它根据数组_1的字段名创建对象:
const SampleConstructor = createConstructor(array_1)
然后,对于数组_2中的每个条目,可以应用SampleConstructor:
const result = array_2.map(fields => new SampleConstructor(fields))
动机
创建专用构造函数可以为应用程序添加一些清晰的语义,向读者显示您正在做什么,并在运行时将构造函数信息存储在创建的对象中
当您以后想知道哪个构造函数生成了哪些对象时,您可以调用object.constructor
,并使用此信息确定它们是什么类型的对象
例如,调用result[0].constructor==SampleConstructor
将为true,因为SampleConstructor是创建第一个结果的构造函数
演示
这是一个完整的演示
const数组_1=[{name:“Color”,field:“Color”},{name:“Shape”,field:“Shape”},{name:“Whatever”,field:“Whatever”}]
常量数组_2=[[“绿色”、“矩形”、“whatever1”]、[“黄色”、“圆形”、“whatever2”]]
函数createConstructor(fieldsDescriptor){
返回函数(字段){
fieldsDescriptor.forEach((描述符,索引)=>{
此[descriptor.field]=字段[index]
})
}
}
常量采样构造函数