如何将对象数组中指定键的所有值转换为小写?
解决对象数组指定键值转小写的问题
嘿,我来帮你搞定这个问题~你之前用map的思路方向是对的,但问题出在两个细节上:一是你只返回了Domain的值,没保留整个对象结构;二是toLowerCase后面没加括号,这是引用函数而不是实际调用它执行转换。
下面给你两种靠谱的解法,都能保留原对象的所有属性,只把指定的Domain值转成小写:
方法一:使用展开运算符(ES6+)
这种写法简洁直观,会创建全新的对象,完全不会修改原数组里的对象:
var array = [ { "Name": "Bill", "Domain": "TEST.com" }, { "Name": "John", "Domain": "JohnTest.com" }, { "Name": "Fred", "Domain": "fredtest.com" } ]; var newArray = array.map(function(obj) { return { ...obj, // 复制原对象的所有属性 Domain: obj.Domain.toLowerCase() // 覆盖Domain属性为小写后的值 }; });
方法二:使用Object.assign(兼容旧环境)
如果你的项目需要兼容不支持ES6的环境,用Object.assign来合并对象是更稳妥的选择:
var newArray = array.map(function(obj) { return Object.assign({}, obj, { Domain: obj.Domain.toLowerCase() }); });
这里Object.assign会先创建一个空对象,然后依次把原对象的属性、新的Domain属性合并进去,同样不会改动原数组里的原始对象。
额外提醒:处理可能缺失的键
如果数组里存在没有Domain键的对象,可以加个判断避免报错:
var newArray = array.map(function(obj) { return { ...obj, Domain: obj.Domain ? obj.Domain.toLowerCase() : obj.Domain }; });
运行上面的代码后,你就能得到完全符合预期的结果:
// newArray的最终内容 [ { "Name": "Bill", "Domain": "test.com" }, { "Name": "John", "Domain": "johntest.com" }, { "Name": "Fred", "Domain": "fredtest.com" } ]
内容的提问来源于stack exchange,提问作者MattMcCode
相关产品推荐
相关产品推荐

