typescript 如何将数组对象数组修改为单个对象数组?[复制]

ruoxqz4g  于 2023-04-22  发布在  TypeScript
关注(0)|答案(2)|浏览(132)

此问题已在此处有答案

JavaScript flattening an array of arrays of objects(14个答案)
5天前关闭。
我想修改现有的数组,它看起来像这样:

[
 [
  {
   prop1: 'FieldName', 
   prop2: 'FieldValue'
  }
 ],

 [
  {
   prop1: 'OtherFieldName',
   prop2: 'OtherFieldValue'
  }
 ],
]

现在每个对象都有一个唯一的id,并将prop1值设置为新对象的键。

[
 {
  id: 1, 
  FieldName: 'FieldValue'
 },
 {
  id: 2, 
  OtherFieldName: 'OtherFieldValue'
 }
]

我知道这可能比原来的问题问得更多,但我想我错过了一些非常简单的东西,只是不知道最佳的方法去做。

2mbi3lxu

2mbi3lxu1#

迭代原始数组,在每次迭代中创建一个新对象,为它添加一个.id,然后迭代元素以获得其余的键值对:

function convert2(arrayOfObjects) {
  const newObjects = [];
  
  for (const [index, keyValuePairs] of arrayOfObjects.entries()) {
    const object = {};
    
    object.id = index + 1;
    
    for (const { prop1: key, prop2: value } of keyValuePairs) {
      object[key] = value;
    }
    
    newObjects.push(object);
  }
  
  return newObjects;
}

试试看(精简版):

function convert(arrayOfObjects) {
  return arrayOfObjects.map(
    (keyValuePairs, index) => Object.fromEntries(
      keyValuePairs.map(
        ({ prop1: key, prop2: value }) => [key, value]
      ).concat([
        ['id', index + 1]
      ])
    )
  );
}

const test = [
  [{ prop1: 'FieldName', prop2: 'FieldValue' }],
  [
    { prop1: 'OtherFieldName', prop2: 'OtherFieldValue' },
    { prop1: 'AnotherFieldName', prop2: 'AnotherFieldValue' }
  ],
];

console.log(convert(test));
.as-console-wrapper {
  max-height: 100% !important;
}
h5qlskok

h5qlskok2#

这里有一个解决方案。

const input = [
  [{
    prop1: 'FieldName',
    prop2: 'FieldValue'
  }],

  [{
    prop1: 'OtherFieldName',
    prop2: 'OtherFieldValue'
  }],
]

const output = [];
for (const arr of input) {
  for (let i = 0; i < arr.length; i++) {
    const item = arr[i];
    output.push({
      id: output.length + 1,
      [item.prop1]: item.prop2
    })
  }
}
console.log(output);

相关问题