如何小写Javascript对象值?

mon*_*nda 1 javascript lodash

我有一个JS对象数组:

var obj = [{key1: Value1, key2: VALUE2},{key1: Value1, key2: VALUE2}]; 
Run Code Online (Sandbox Code Playgroud)

我希望key2的值为小写,如下所示:

var obj = [{key1: Value1, key2: value2},{key1: Value1, key2: value2}]; 
Run Code Online (Sandbox Code Playgroud)

如何将值从小写更改为大写?

Jam*_*Hay 5

如果我正确理解你的问题,你想要改变每个对象key2属性的值,使其成为小写字符串(我假设它们是字符串.)

您可以使用简单的地图执行此操作.

obj = obj.map(function(a) { 
    a.key2 = a.key2.toLowerCase();
    return a;
});
Run Code Online (Sandbox Code Playgroud)

这里给出的所有答案都存在一些差异,包括对象引用.在我上面的回答中,数组本身将是一个新的引用,但里面的对象将保持相同的引用.通过举例的方式澄清这一点

var mapped = obj.map(function(a) { 
    a.key2 = a.key2.toLowerCase();
    return a;
});

console.log(obj === mapped) // false
console.log(obj[0] === mapped[0]) // true
Run Code Online (Sandbox Code Playgroud)

如果您正在使用for循环或forEach数组函数,那么数组引用将保持不变.

如果您Object.assign在@Piotrs答案中使用,则对象引用本身将更改,例如:

var mapped = obj.map(function (item) {
    return Object.assign(item, { key2: item.key2.toLowerCase() });
});

console.log(obj[0] === mapped[0]); //false
Run Code Online (Sandbox Code Playgroud)

感谢@ user3297291

为了指出Object.assign实际上不会更改对象引用或创建新引用,它会在assign方法的第一个参数上执行赋值,并返回对该对象的引用.

var item = { key1: 'value1', key2: 'VALUE2' };

var newItem = Object.assign(item, { key2: item.key2.toLowerCase() });
console.log(newItem === item); // true

var newRef = Object.assign({}, item, { key2: item.key2.toLowerCase() });
console.log(newRef === item); // false
Run Code Online (Sandbox Code Playgroud)

看到这个小提琴,以供参考