我用ES6和Babel(es2015预设)编写了一些代码atm,我不能像以前那样传播一个Object。通常我会使用一个对象,使用一个点差并映射内部内容,如[...someObject].map(dosomestuff)
。但是我的一个对象没有按预期运行,到目前为止我发现的唯一区别是键:
let myObject = {
'key': content,
'key2': content,
'key3': content
};
let array = [...myObject];
由于对象是从文件结构生成的,因此键由变量组成,并且可以包含特殊字符,因此我需要将它们设置为object[key] = value
。为什么我不能在该对象上使用spread运算符(数组总是为空)?有没有像spread-operator一样舒适的解决方法(我不是说用Object.keys创建一个新的数组并使用它)
答案 0 :(得分:3)
对象spread
适用于bojects,您无法将对象传播到array
。
你应该spread
它到另一个对象:
let myObject = {
'key': "content1",
'key2': "content2",
'key3': "content3"
};
let myObject2 = {
'key4': 'content4'
}
let newObj= {...myObject, ...myObject2};
console.log(newObj);

这不是ES6的一部分,但它位于stage 3
答案 1 :(得分:2)
为什么我不能在该对象上使用spread运算符?
当该元素 iterable 时,您只能使用spread 元素。对象不可迭代。
有没有像spread-operator一样舒适的解决方法(我不是说用Object.keys创建一个新的数组并使用它)
不在ES6中。
我假设你想从对象中获取属性 values 。
如果你不想写一个辅助功能并且不一定想要使用传播元素,你实际上可以利用Array.from
的能力来映射函数作为第二个参数:
Array.from(Array.keys(myObject), x => myObject[x]);
如果你真的不想使用Object.keys
(Object.values
在ES6中不存在),那么你可以自己编写自己的帮助函数作为生成器:
function* values(obj) {
for (var x in obj) {
// You can use `obj.hasOwnProperty(x)` to guard against inherited properties
// to achieve the same effect as `Object.keys`
yield obj[x];
}
}
let myObject = {
'key': 'content',
'key2': 'content1',
'key3': 'content2'
};
console.log([...values(myObject)]);
// or
console.log(Array.from(values(myObject)));

答案 2 :(得分:0)
使用Chrome我发现在对象上使用spread会导致异常。使用Map
的工作是什么