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

React Native中如何正确转换对象为数组适配searchable-dropdown组件

解决react-native-searchable-dropdown的数组构建问题

核心问题分析

你的代码存在两个关键错误:

  1. 数据源定义语法错误:你试图创建包含多个对象的数组,却错误使用了对象的大括号{},写成了obj={{id:8,name:'Yyff'}, {...}}。这种写法不符合JavaScript语法,会被解析为无效对象,最终导致后续取出的元素变成字符串形式。
  2. 遍历逻辑错误:即便数据源是正确的数组,你用Object.keys(obj)去遍历数组的方式完全多余,且循环中访问元素的语法也有遗漏(obj[arr[j]缺少闭合方括号)。

直接解决方案

最根本的解决办法是正确定义数据源数组,直接得到符合react-native-searchable-dropdown要求的格式:

// 直接定义标准的对象数组,无需后续额外处理
const clone = [
  {id:8,name:'Yyff'},
  {id:8,name:'Yyff'},
  {id:7,name:'Hsjdb56'},
  {id:6,name:'Suku'},
  {id:5,name:'Jira'},
  {id:4,name:'Suku '},
  {id:3,name:'Joseph'},
  {id:2,name:'Rosh'},
  {id:1,name:'Zulu'}
];

如果需要从现有数组复制(而非直接定义)

如果你的数据源本身已经是正确的数组,想要复制一份新数组,有几种简洁的方式:

  1. 扩展运算符复制
const originalArr = [/* 你的对象数组 */];
const clone = [...originalArr];
  1. Array.from复制
const originalArr = [/* 你的对象数组 */];
const clone = Array.from(originalArr);
  1. 普通循环遍历(修正后的写法)
const originalArr = [/* 你的对象数组 */];
const clone = [];
for (let j = 0; j < originalArr.length; j++) {
  clone.push(originalArr[j]);
}

验证结果

上述方法得到的clone都是标准的对象数组,打印后与你的期望完全一致:

console.log(clone);
// 输出:
// [
//   {id:8,name:'Yyff'},
//   {id:8,name:'Yyff'},
//   {id:7,name:'Hsjdb56'},
//   {id:6,name:'Suku'},
//   {id:5,name:'Jira'},
//   {id:4,name:'Suku '},
//   {id:3,name:'Joseph'},
//   {id:2,name:'Rosh'},
//   {id:1,name:'Zulu'}
// ]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 16:57:42