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

React中如何根据用户输入筛选对象并映射对应数组?

解决React中根据用户名映射对应喜好数组的问题

问题根源

你原代码的核心问题是:Object.values(data)返回的是每个用户的喜好对象(比如{likes: [...], hates: [...]}),而input是字符串类型的用户名,两者永远无法匹配,导致filter后得到空数组,自然渲染不出内容。

最简解决方案

不需要用filter绕弯,直接通过对象的键名访问就能拿到目标用户的数据,这是处理键值对对象最直接的方式:

// 假设data是你的原始数据,input是选中的用户名
const data = {
  "Susan": {
    "likes": ["shopping", "skiing", "surfing"],
    "hates": ["cycling", "reading", "cleaning"]
  },
  "Andrew": {
    "likes": ["driving", "hiking", "coding"],
    "hates": ["dancing", "running", "cleaning dishes"]
  }
};

let input = "Susan";

// 直接通过键名获取用户数据
const user = data[input];

// 渲染组件
return (
  <div>
    <h3>{input} 的喜好</h3>
    <div>
      <h4>喜欢的事:</h4>
      <ul>
        {/* 映射likes数组,注意加唯一key */}
        {user.likes.map((item, idx) => (
          <li key={idx}>{item}</li>
        ))}
      </ul>
    </div>
    <div>
      <h4>讨厌的事:</h4>
      <ul>
        {/* 映射hates数组 */}
        {user.hates.map((item, idx) => (
          <li key={idx}>{item}</li>
        ))}
      </ul>
    </div>
  </div>
);

额外优化:处理用户不存在的情况

如果输入的用户名可能不在数据中,建议加个判断避免报错:

const user = data[input];

if (!user) {
  return <div>未找到该用户</div>;
}

// 正常渲染逻辑...

扩展:实现用户选择器

如果需要让用户手动选择用户名,可以用Object.keys(data)获取所有用户名生成选项:

import { useState } from 'react';

function App() {
  const [selectedUser, setSelectedUser] = useState("Susan");
  const data = { /* 你的原始数据 */ };
  const user = data[selectedUser];

  return (
    <div>
      {/* 用户选择下拉框 */}
      <select 
        value={selectedUser} 
        onChange={(e) => setSelectedUser(e.target.value)}
      >
        {Object.keys(data).map(name => (
          <option key={name} value={name}>{name}</option>
        ))}
      </select>

      {/* 渲染用户喜好 */}
      {!user ? (
        <div>未找到该用户</div>
      ) : (
        <div>
          <h3>{selectedUser} 的喜好</h3>
          <div>
            <h4>喜欢的事:</h4>
            <ul>{user.likes.map((item, idx) => <li key={idx}>{item}</li>)}</ul>
          </div>
          <div>
            <h4>讨厌的事:</h4>
            <ul>{user.hates.map((item, idx) => <li key={idx}>{item}</li>)}</ul>
          </div>
        </div>
      )}
    </div>
  );
}

export default App;

内容的提问来源于stack exchange,提问作者m.skace1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:01:40