📜  对象数组创建公共键作为属性并创建对象数组 - TypeScript (1)

📅  最后修改于: 2023-12-03 14:53:40.520000             🧑  作者: Mango

TypeScript:使用对象数组创建公共键作为属性并创建对象数组

在 TypeScript 中,可以使用对象数组来创建一个包含公共键作为属性的新数组。这在处理数据时非常有用,特别是在与数据库或 API 交互时。

实现步骤

为了创建一个使用公共键作为属性的对象数组,需要遵循以下步骤:

  1. 创建一个包含键值对的对象数组。
  2. 找到对象数组中的所有不同键。
  3. 使用不同键创建一个新对象数组,其中每个对象包含一个公共键和对应的值数组。
  4. 遍历原始对象数组并将每个对象的值添加到相应的公共键数组中。
  5. 将新数组返回作为结果。

下面是一个示例函数,它使用上述步骤创建具有公共键的对象数组:

function createCommonKeyArray<T>(array: T[], commonKey: keyof T): { [key: string]: any[] }[] {
  // Find all unique keys
  const keys: string[] = Array.from(new Set(array.map((item: T) => item[commonKey])));

  // Create new object for each key
  const result = keys.map((key: string) => ({ [commonKey]: key, [commonKey + 'Values']: [] }));

  // Add values to corresponding arrays
  array.forEach(item => {
    const index = result.findIndex(resultItem => resultItem[commonKey] === item[commonKey]);
    result[index][commonKey + 'Values'].push(item);
  });

  return result;
}

在上面的示例中,我们首先找到对象数组中的所有不同键(在本例中为 commonKey),并创建一个新数组来存储所有键和对应值的数组。然后我们遍历原始数组并附加每个对象的值到相应的键数组。最后,我们返回新数组作为结果。

使用示例

这是一个使用上述函数创建具有公共键的对象数组的示例:

interface Item {
  id: number;
  category: string;
  name: string;
}

const data: Item[] = [
  { id: 1, category: 'fruit', name: 'apple' },
  { id: 2, category: 'vegetable', name: 'carrot' },
  { id: 3, category: 'fruit', name: 'orange' },
  { id: 4, category: 'vegetable', name: 'potato' },
  { id: 5, category: 'fruit', name: 'banana' },
];

const result = createCommonKeyArray(data, 'category');

console.log(result);

这将创建具有以下格式的输出:

[
  { category: 'fruit', categoryValues: [ { id: 1, category: 'fruit', name: 'apple' }, { id: 3, category: 'fruit', name: 'orange' }, { id: 5, category: 'fruit', name: 'banana' } ] },
  { category: 'vegetable', categoryValues: [ { id: 2, category: 'vegetable', name: 'carrot' }, { id: 4, category: 'vegetable', name: 'potato' } ] }
]

在上面的示例中,我们使用一个包含不同种类的食物的对象数组。我们为类别键调用 createCommonKeyArray 函数,并以 'category' 作为公共键。函数返回一个数组,其中每个对象都包含类别(fruit 或 vegetable)和所有属于该类别的食品的数组。

如需详细了解 TypeScript 中的对象数组,请参阅官方文档:https://www.typescriptlang.org/docs/handbook/objects.html#object-types