JavaScript对象生成器
是否有构造映射(对象)的生成器方法?我只需要键/值映射。
对于生成数组,我可以写类似于这种
function* rangeA(start, stop) {
while(start < stop)
yield start++
}
let data = [...rangeA(1, 3), ...rangeA(20, 22)]
// data is [1, 2, 20, 21]
非发电机的方法来以类似的方式构造对象,看起来
function rangeB(start, stop) {
let result = {}
while(start < stop) {
result[start] = start
start++
}
return result
}
let data = {...rangeB(1, 3), ...rangeB(20, 22)}
// data is {1: 1, 2: 2, 20: 20, 21: 21}
是否有一个生成器方法来构造对象?类似的东西
// DOES NOT WORK
function* rangeC(start, stop) {
while(start < stop) {
yield {[start]: start}
start++
}
}
let data = {...rangeC(1, 3), ...rangeC(20, 22)}
// data is unfortunately an empty object
let data2 = [...rangeC(1, 3), ...rangeC(20, 22)]
// data2 is obviously [{1: 1}, {2: 2}, {3: 3}, {20: 20}, {21: 21}]
// which is not what I want.
let data3 = data2.reduce((a, b) => ({...a, ...b}))
// data3 is finally {1: 1, 2: 2, 20: 20, 21: 21}
// but it seems overcomplicated to me
Is there a generator approach to constructing a mapping (object)? I just need key/value mapping.
For generating array, I can write something like this
function* rangeA(start, stop) {
while(start < stop)
yield start++
}
let data = [...rangeA(1, 3), ...rangeA(20, 22)]
// data is [1, 2, 20, 21]
Non generator approach to construct an object in a similar way can look like this
function rangeB(start, stop) {
let result = {}
while(start < stop) {
result[start] = start
start++
}
return result
}
let data = {...rangeB(1, 3), ...rangeB(20, 22)}
// data is {1: 1, 2: 2, 20: 20, 21: 21}
Is there a generator approach to construct an object? Something like this
// DOES NOT WORK
function* rangeC(start, stop) {
while(start < stop) {
yield {[start]: start}
start++
}
}
let data = {...rangeC(1, 3), ...rangeC(20, 22)}
// data is unfortunately an empty object
let data2 = [...rangeC(1, 3), ...rangeC(20, 22)]
// data2 is obviously [{1: 1}, {2: 2}, {3: 3}, {20: 20}, {21: 21}]
// which is not what I want.
let data3 = data2.reduce((a, b) => ({...a, ...b}))
// data3 is finally {1: 1, 2: 2, 20: 20, 21: 21}
// but it seems overcomplicated to me
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
尝试使用代码> :
对于一个发电机,您可以直接传递:
或创建一个
链条
处理多个处理方法:Try using
Object.fromEntries
:For one generator, you can pass it directly:
Or create a
chain
method to process multiple: