我有以下功能,如下所示:
function addProperty(object, property) {
}
我必须将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');
这是我得到的输出:{ object: { x: 5 }, y: null }
。我在这做错了什么?如何摆脱输出开头的对象属性,并保留对象本身和属性??。
答案 0 :(得分:7)
使用Object#assign基于原始对象创建新对象,使用新属性:
function addProperty(object, property) {
return Object.assign({}, object, { [property]: null });
}
console.log(addProperty({x:5}, 'y'));
或使用Object Rest/Spread proposal(需要Babel和transform):
function addProperty(object, property) {
return { ...object, [property]: null };
}
console.log(addProperty({x:5}, 'y'));
您的代码出了什么问题:
当您编写{ object }
时,您正在使用ES6 Shorthand property names创建一个具有属性“object”的新对象文字,其中包含旧对象的值。你有效地写作:
object = { object: object }
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'));
答案 1 :(得分:3)
像这样设置对象属性:
function addProperty(object, property) {
object[property] = null;
return object;
}
答案 2 :(得分:1)
只需以这种方式设置对象的属性
function addProperty(object, property) {
object[property] = null
return object;
}
console.log(addProperty({x:5}, 'y'));
在ES6
中,Object.defineProperty()
方法直接在对象上定义新属性,或修改对象上的现有属性,并返回该对象。
function addProperty(object, property) {
Object.defineProperty(object, property, {
value: null,
writable: true,
enumerable: true,
configurable: true
});
return object;
}
var o = {x:5};
console.log(addProperty(o, 'y'));
详细了解here