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

JavaScript对象解构:处理数据库返回JSON对象获取姓名数组供下拉选择使用

实现方案

你可以在接口请求成功后直接通过对象解构+数组转换得到目标格式的姓名数组,数据转换仅执行1次,避免渲染阶段重复处理属性,效率更高,具体实现如下:


1. 接口层直接处理数据格式

请求成功后直接对返回数组的每一项做对象解构取出name字段,同时转大写,返回业务直接可用的字符串数组:

// fetch版本
export const fetchNames = async () =>{
  try{
    const response = await fetch(`http://localhost:5000/towns`);
    const rawData = await response.json();
    // 对每一项对象解构取name,直接转大写返回
    return rawData.map(({ name = '' }) => name.toUpperCase());
  }catch(error){
    console.error('请求出错:', error);
    return []; // 出错返回空数组,避免后续渲染报错
  } 
}

// axios版本(注意axios返回的响应体在data字段下)
export const fetchNames = async() => {
  try {
    const res = await axios.get("http://localhost:5000/names");  
    return res.data.map(({ name = '' }) => name.toUpperCase());
  } catch (error) {
    console.error('请求出错:', error);
    return [];
  }
}

2. 组件内使用逻辑

state中直接存储纯姓名数组,渲染时无需再做属性读取:

const [fetchedNames, setFetchedNames] = useState([]);

useEffect(()=>{
  const fetchApi = async () =>{
    const names = await fetchNames();
    setFetchedNames(names);
  }
  fetchApi();
},[]);

// 渲染下拉选项逻辑更简洁
{fetchedNames.map((name,i) => (
  <option key={i} value={name}>{name}</option>
))}

优势说明

  • 数据转换仅在请求成功时执行一次,无需每次组件重渲染都遍历读取对象属性,渲染性能更高
  • 直接通过对象解构取name字段,代码更简洁,符合你要的解构取值需求
  • 异常场景返回空数组,避免错误对象存入state导致后续遍历报错

内容的提问来源于stack exchange,提问作者newincodin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:15:03