如何将数组的每个索引转为小写,同时将数组内部元素转为大写?
解决方法:递归处理嵌套结构的键与值
首先我得先明确下你的需求——应该是要把数组中嵌套对象的所有键(包括多层嵌套的)转换为小写,同时把结构中的字符串类型元素转换为大写(毕竟数组的索引是数字,转小写没实际意义,结合你给的示例结构,重点应该是处理对象键和字符串值)。
下面用JavaScript实现这个逻辑,核心是用递归函数来处理多层嵌套的结构:
实现代码
function transformStructure(data) { // 处理数组:遍历每个元素递归处理 if (Array.isArray(data)) { return data.map(item => transformStructure(item)); } // 处理对象:遍历键值对转换 if (typeof data === 'object' && data !== null) { const transformedObj = {}; for (const key in data) { if (data.hasOwnProperty(key)) { // 键转小写 const lowerKey = key.toLowerCase(); const value = data[key]; // 根据值的类型处理:字符串转大写,其他递归处理 transformedObj[lowerKey] = typeof value === 'string' ? value.toUpperCase() : transformStructure(value); } } return transformedObj; } // 非对象非数组的非字符串类型,直接返回 return data; } // 测试你的示例数据 const sampleData = [{ "abc": { "xyz": { "jpy": {} }}}]; const result = transformStructure(sampleData); console.log(result); // 输出:[{ "abc": { "xyz": { "jpy": {} }}}] (因为原键已经是小写,所以没变化) // 测试带字符串值的情况 const testData = [{ "Abc": { "XyZ": { "JPY": "hello world", "num": 123 }}}]; const testResult = transformStructure(testData); console.log(testResult); // 输出:[{ "abc": { "xyz": { "jpy": "HELLO WORLD", "num": 123 }}}]
代码说明
- 递归处理是关键:因为你的结构是多层嵌套的,递归能自动遍历到每一层的对象和数组;
- 数组处理:用
map遍历每个元素,对每个元素调用转换函数; - 对象处理:遍历每个键,先把键转小写,然后判断值的类型:如果是字符串就转大写,否则继续递归处理(比如嵌套对象或数组);
- 边界处理:排除
null(因为typeof null也是object),非对象/数组/字符串的类型直接返回原值。
如果你的需求是其他编程语言(比如Python),可以告诉我,我再给你对应实现~
内容的提问来源于stack exchange,提问作者rk_programmer
相关产品推荐
相关产品推荐

