插件窝 干货文章 JavaScript数组如何高效匹配并合并数据构建新数组?

JavaScript数组如何高效匹配并合并数据构建新数组?

name id const age 916    来源:    2025-03-19

在JavaScript中,高效匹配并合并数组数据以构建新数组可以通过多种方式实现,具体取决于你的需求和数据结构。以下是一些常见的方法:

1. 使用 mapfind 方法

如果你有两个数组,并且想要根据某个条件匹配并合并它们,可以使用 mapfind 方法。

const array1 = [
  { id: 1, name: 'Alice' },
  { id: 2, name: 'Bob' },
  { id: 3, name: 'Charlie' }
];

const array2 = [
  { id: 1, age: 25 },
  { id: 2, age: 30 },
  { id: 3, age: 35 }
];

const mergedArray = array1.map(item1 => {
  const matchingItem = array2.find(item2 => item2.id === item1.id);
  return { ...item1, ...matchingItem };
});

console.log(mergedArray);
// 输出:
// [
//   { id: 1, name: 'Alice', age: 25 },
//   { id: 2, name: 'Bob', age: 30 },
//   { id: 3, name: 'Charlie', age: 35 }
// ]

2. 使用 reduce 方法

如果你有多个数组需要合并,或者需要更复杂的逻辑,可以使用 reduce 方法。

const array1 = [
  { id: 1, name: 'Alice' },
  { id: 2, name: 'Bob' },
  { id: 3, name: 'Charlie' }
];

const array2 = [
  { id: 1, age: 25 },
  { id: 2, age: 30 },
  { id: 3, age: 35 }
];

const mergedArray = array1.reduce((acc, item1) => {
  const matchingItem = array2.find(item2 => item2.id === item1.id);
  acc.push({ ...item1, ...matchingItem });
  return acc;
}, []);

console.log(mergedArray);
// 输出:
// [
//   { id: 1, name: 'Alice', age: 25 },
//   { id: 2, name: 'Bob', age: 30 },
//   { id: 3, name: 'Charlie', age: 35 }
// ]

3. 使用 Map 数据结构

如果你有大量的数据需要匹配,使用 Map 数据结构可以提高查找效率。

const array1 = [
  { id: 1, name: 'Alice' },
  { id: 2, name: 'Bob' },
  { id: 3, name: 'Charlie' }
];

const array2 = [
  { id: 1, age: 25 },
  { id: 2, age: 30 },
  { id: 3, age: 35 }
];

const map = new Map(array2.map(item => [item.id, item]));

const mergedArray = array1.map(item1 => {
  const matchingItem = map.get(item1.id);
  return { ...item1, ...matchingItem };
});

console.log(mergedArray);
// 输出:
// [
//   { id: 1, name: 'Alice', age: 25 },
//   { id: 2, name: 'Bob', age: 30 },
//   { id: 3, name: 'Charlie', age: 35 }
// ]

4. 使用 lodash

如果你不介意使用第三方库,lodash 提供了非常强大的工具函数来简化数组操作。

const _ = require('lodash');

const array1 = [
  { id: 1, name: 'Alice' },
  { id: 2, name: 'Bob' },
  { id: 3, name: 'Charlie' }
];

const array2 = [
  { id: 1, age: 25 },
  { id: 2, age: 30 },
  { id: 3, age: 35 }
];

const mergedArray = _.merge(_.keyBy(array1, 'id'), _.keyBy(array2, 'id'));
const result = _.values(mergedArray);

console.log(result);
// 输出:
// [
//   { id: 1, name: 'Alice', age: 25 },
//   { id: 2, name: 'Bob', age: 30 },
//   { id: 3, name: 'Charlie', age: 35 }
// ]

总结

  • mapfind:适用于简单的匹配和合并操作。
  • reduce:适用于更复杂的逻辑或多个数组的合并。
  • Map 数据结构:适用于大量数据的匹配,提高查找效率。
  • lodash:提供了强大的工具函数,简化数组操作。

根据你的具体需求选择合适的方法。