You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在React中使用useState Hook合并两个数组

React 中根据 ID 合并两个数组并结合 useState 实现

假设你已拥有两个目标数组:

const countArray = [
  { "id": 1, "count": "2" },
  { "id": 2, "count": "1" },
  { "id": 3, "count": "1" },
  { "id": 4, "count": "1" },
  { "id": 5, "count": "1" }
];

const nameArray = [
  { "id": 1, "name": "Laptop" },
  { "id": 2, "name": "SSD" },
  { "id": 3, "name": "Keyboard" },
  { "id": 4, "name": "Mouse" },
  { "id": 5, "name": "Speaker" }
];

方法一:map + find 直观合并

这种方式逻辑简单,适合数组规模不大的场景:

const mergedArray = countArray.map(item => {
  // 根据id匹配对应name对象
  const matchedNameItem = nameArray.find(nameItem => nameItem.id === item.id);
  // 合并两个对象,匹配不到时用空对象避免报错
  return { ...item, ...(matchedNameItem || {}) };
});

方法二:构建映射表提升性能

如果数组元素较多,先将其中一个数组转为以id为键的映射对象,能把时间复杂度从O(n²)降到O(n),性能更优:

// 把name数组转成id->对应对象的映射表
const nameMap = nameArray.reduce((map, item) => {
  map[item.id] = item;
  return map;
}, {});

// 遍历count数组,直接通过映射表匹配合并
const mergedArray = countArray.map(item => ({
  ...item,
  ...nameMap[item.id]
}));

在 React 组件中结合 useState 使用

如果原数组是组件状态/Props,或者需要将合并结果存入状态,可以这样实现:

import { useState, useEffect } from 'react';

function MyComponent() {
  // 初始化原数组状态
  const [counts, setCounts] = useState([
    { "id": 1, "count": "2" },
    { "id": 2, "count": "1" },
    { "id": 3, "count": "1" },
    { "id": 4, "count": "1" },
    { "id": 5, "count": "1" }
  ]);
  
  const [names, setNames] = useState([
    { "id": 1, "name": "Laptop" },
    { "id": 2, "name": "SSD" },
    { "id": 3, "name": "Keyboard" },
    { "id": 4, "name": "Mouse" },
    { "id": 5, "name": "Speaker" }
  ]);

  // 存储合并后的结果
  const [mergedData, setMergedData] = useState([]);

  // 当原数组变化时重新合并
  useEffect(() => {
    const nameMap = names.reduce((map, item) => {
      map[item.id] = item;
      return map;
    }, {});

    const merged = counts.map(item => ({
      ...item,
      ...nameMap[item.id]
    }));

    setMergedData(merged);
  }, [counts, names]);

  return (
    <div>
      <h3>Merged Data:</h3>
      <ul>
        {mergedData.map(item => (
          <li key={item.id}>
            {item.name}: {item.count}
          </li>
        ))}
      </ul>
    </div>
  );
}

export default MyComponent;

执行后就能得到你期望的合并结果,每个对象包含id、count和name字段。

内容的提问来源于stack exchange,提问作者Mustafa Özkan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 08:24:13