错误地返回一个对象?

时间:2017-11-20 14:15:46

标签: javascript ecmascript-6

我有以下功能,如下所示:

    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 }。我在这做错了什么?如何摆脱输出开头的对象属性,并保留对象本身和属性??。

3 个答案:

答案 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