我将如何减少这个数组,以便每个对象中的对象被合并 javascript 但不知道键值名称

Posted

技术标签:

【中文标题】我将如何减少这个数组,以便每个对象中的对象被合并 javascript 但不知道键值名称【英文标题】:How would I reduce this array so the objects in each are merged javascript but dont know key value names 【发布时间】:2021-05-31 15:08:43 【问题描述】:

我在一个数组中有一个数组,我想减少子数组,使它们成为其中的一个对象。这是生成数组的代码

const final = data.formEntryData.map((item) => 
    //console.log(Object.keys(item.data));
    let key = Object.values(item.data);
    let test = data.hmm.map((array) => 
      //console.log(array.arrayOrder);
      return  [array.name]: key[array.arrayOrder] ;
    );
    return test;
  );

这是数组中的数组

[
  [
     'Product Title Test': 'fdsafa' ,
     'Product Description': 'ffdsafa' ,
     'Product Image': 'fdasf' ,
     'Product Price': undefined ,
     'Live on Website Test two Three': undefined 
  ],
  [
     'Product Title Test': 'Roasted Beans' ,
     'Product Description': 'For the Squire' ,
     'Product Image': 'http://image.com' ,
     'Product Price': undefined ,
     'Live on Website Test two Three': undefined 
  ],
  [
     'Product Title Test': 'Shoes' ,
     'Product Description': 'Worn' ,
     'Product Image': 'google.com' ,
     'Product Price': '100' ,
     'Live on Website Test two Three': undefined 
  ],
  [
     'Product Title Test': 'fdsajkl' ,
     'Product Description': 'klfdlsk' ,
     'Product Image': 'flkdsjl' ,
     'Product Price': 'flskj' ,
     'Live on Website Test two Three': 'lkjfsdlk' 
  ],
  [
     'Product Title Test': 'shoes' ,
     'Product Description': 'very good' ,
     'Product Image': 'image.com' ,
     'Product Price': '20' ,
     'Live on Website Test two Three': 'yes' 
  ],
  [
     'Product Title Test': 'fdsaf' ,
     'Product Description': 'fdsa' ,
     'Product Image': 'fdsa' ,
     'Product Price': 'fdsa' ,
     'Live on Website Test two Three': 'fdsa' 
  ],
  [
     'Product Title Test': 'fdskj' ,
     'Product Description': '291898868491092489' ,
     'Product Image': 'fsdk' ,
     'Product Price': '291898998629859848' ,
     'Live on Website Test two Three': 'fsd;lk' 
  ],
  [
     'Product Title Test': 'fdsfa' ,
     'Product Description': 'fdsaf' ,
     'Product Image': 'fdsafa' ,
     'Product Price': 'fdsaf' ,
     'Live on Website Test two Three': 'fdasf' 
  ],
  [
     'Product Title Test': 'ds' ,
     'Product Description': 'fdsa' ,
     'Product Image': 'fdsa' ,
     'Product Price': 'fdsa' ,
     'Live on Website Test two Three': 'fdsa' 
  ],
  [
     'Product Title Test': 'fdsfds' ,
     'Product Description': 'fdsfafds' ,
     'Product Image': 'fdsafs' ,
     'Product Price': 'fdsaf' ,
     'Live on Website Test two Three': 'fdsaf' 
  ],
  [
     'Product Title Test': 'fdsfds' ,
     'Product Description': 'fdsfafds' ,
     'Product Image': 'fdsafs' ,
     'Product Price': 'fdsaf' ,
     'Live on Website Test two Three': 'fdsaf' 
  ],
  [
     'Product Title Test': 'fdsaf' ,
     'Product Description': 'fdsafs' ,
     'Product Image': 'fdasfd' ,
     'Product Price': 'fdasfdsa' ,
     'Live on Website Test two Three': 'fdasfd' 
  ]
]

我想merge the subarrays 所以一个看起来像这样

[
[...],
[
     'Product Title Test': 'fdsaf',
    'Product Description': 'fdsafs',
    'Product Image': 'fdasfd',
    'Product Price': 'fdasfdsa',
    'Live on Website Test two Three': 'fdasfd' 
  ]
,
[...]
]

我看过这样的reduce

var arr = [key:"11", value:"1100",key:"22", value:"2200"];
var object = final.reduce(
  (obj, item,) => Object.assign(obj,  [item.key]: item.value ), );

console.log(object)

但是我不知道 item.key.item.value 的名称,因为它们是在 map 函数中派生的。

任何帮助都会很棒。谢谢!

【问题讨论】:

请更新您的问题以使用更少的输入数据,但给我们一个完整的匹配输出。例如,输出中的 [...] 数组是什么?对我来说,问题的输入和输出看起来是一样的,所以我不知道你在做什么。 【参考方案1】:

鉴于您提供的数组,您可以使用以下函数将嵌套数组合并为对象,该函数使用Object.entries 访问每个对象的属性。

function mergeInner(outer) 
  return outer.map(inner =>
    inner.reduce((merged, obj) => 
      Object.entries(obj).forEach(([k, v]) => 
        merged[k] = v;
      );
      return merged;
    , )
  );

产生:

[
  
    'Product Title Test': 'fdsafa',
    'Product Description': 'ffdsafa',
    'Product Image': 'fdasf',
    'Product Price': undefined,
    'Live on Website Test two Three': undefined
  ,
  
    'Product Title Test': 'Roasted Beans',
    'Product Description': 'For the Squire',
    'Product Image': 'http://image.com',
    'Product Price': undefined,
    'Live on Website Test two Three': undefined
  ,
  ...

【讨论】:

以上是关于我将如何减少这个数组,以便每个对象中的对象被合并 javascript 但不知道键值名称的主要内容,如果未能解决你的问题,请参考以下文章

如何将数组内的对象和每个对象相乘,获取一个或多个键并减少它们的值?

如何将 Spark/Scala RDD 合并/加入到 List 中,以便 RDD 中的每个值与每个 List 项一起获得一个新行

C# Unity如何只选择数组中的一项并取消选择其他项

在 React JS 中合并 2 个对象数组

无法根据字符串值减少对象数组

关于hibernate如何判断缓存中的对象已被修改进行flush操作的机制