React Native中如何正确转换对象为数组适配searchable-dropdown组件
解决react-native-searchable-dropdown的数组构建问题
核心问题分析
你的代码存在两个关键错误:
- 数据源定义语法错误:你试图创建包含多个对象的数组,却错误使用了对象的大括号
{},写成了obj={{id:8,name:'Yyff'}, {...}}。这种写法不符合JavaScript语法,会被解析为无效对象,最终导致后续取出的元素变成字符串形式。 - 遍历逻辑错误:即便数据源是正确的数组,你用
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'} ];
如果需要从现有数组复制(而非直接定义)
如果你的数据源本身已经是正确的数组,想要复制一份新数组,有几种简洁的方式:
- 扩展运算符复制
const originalArr = [/* 你的对象数组 */]; const clone = [...originalArr];
- Array.from复制
const originalArr = [/* 你的对象数组 */]; const clone = Array.from(originalArr);
- 普通循环遍历(修正后的写法)
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
相关产品推荐
相关产品推荐

