Eri*_*rez 2 javascript ecmascript-6
我有一个看起来像这样的以下函数:
function addProperty(object, property) {
}
Run Code Online (Sandbox Code Playgroud)
我必须将property参数的值添加为object参数的键.必须将new属性的值设置为null.之后,我将返回带有新添加属性的对象.预期的输入是这样的:{ x: 5 }, 'y'
左边的对象和右边的属性.预期的产出是这样的:{ x: 5, y: null }
.
这是我到目前为止:
function addProperty(object, property) {
object = { object, [property]: null};
return object;
}
addProperty({x:5}, 'y');
Run Code Online (Sandbox Code Playgroud)
这是我得到的输出:{ object: { x: 5 }, y: null }
.我在这做错了什么?我如何摆脱输出开头看起来像对象属性的东西,并留下对象本身和属性??.
使用Object#assign通过new属性创建基于原始对象的新对象:
function addProperty(object, property) {
return Object.assign({}, object, { [property]: null });
}
console.log(addProperty({x:5}, 'y'));
Run Code Online (Sandbox Code Playgroud)
或者使用Object Rest/Spread提案(需要Babel和转换):
function addProperty(object, property) {
return { ...object, [property]: null };
}
console.log(addProperty({x:5}, 'y'));
Run Code Online (Sandbox Code Playgroud)
您的代码有什么问题:
在编写时{ object }
,您使用ES6速记属性名称创建一个新对象文字,其具有属性"object",具有旧对象的值.你有效地写作:
object = { object: object }
Run Code Online (Sandbox Code Playgroud)
function addProperty(object, property) {
object = { // assign a new object literal to the object variable
object, // add a new property by name of "object" with the contents of the original object
[property]: null
};
return object;
}
console.log(addProperty({x:5}, 'y'));
Run Code Online (Sandbox Code Playgroud)