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

Javascript 如何使用另一个对象数组的键和数组中的值来构造对象数组?

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_1中的
字段
键和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]
    })
    }
    }
    常量采样构造函数