我使用的是一个具有配置对象的javascript模块。 一个已经用默认值设置,用户可以传入值来覆盖这些设置值。 我正在使用Object.Assign来合并这两个对象。
下面是一个例子:
const target = { a: 1, b: 2 }; // <-- default config
const source = { B: 4, c: 5 }; // <-- User input config
Object.assign(target, source);
console.log(target); //{a: 1, b: 2, B: 4, c: 5}
在本例中,如果用户不小心键入了大写的'b'而不是小写的'b',那么config对象将向自身添加另一个值,而我真正想要更新的是小写的'b'。 我知道这是Object.Assign的预期行为,但试图使用户更容易做到这一点,并且不区分大小写。
您必须先将对象键小写,就像这里做的那样
null
const target = { a: 1, b: 2 }; // <-- default config
const source = { B: 4, c: 5 }; // <-- User input config
const lowerSource = Object.keys(source).reduce((c, k) => (c[k.toLowerCase()] = source[k], c), {});
Object.assign(target, lowerSource);
console.log(target);
像那样?
null
const target = { a: 1, b: 2 },
source = { B: 4, c: 5 },
result = Object.assign(
target,
...Object
.keys(source)
.map(key => ({[key.toLowerCase()]: source[key]}))
)
console.log(result)
我相信比其他建议的解决方案更容易理解。
const target = { a: 1, b: 2 }; // <-- default config
const source = { B: 4, c: 5 }; // <-- User input config
Object.keys(source).forEach(key => key.toLowerCase())
Object.assign(target, source);
console.log(target); //{a: 1, b: 2, B: 4, c: 5}