我正在读取带有制表符分隔值的文件,并且希望将其转换为具有命名属性的哈希数组。
我已经研究了the MDN page on Destructuring assignment,但是其中一些涉及更多的示例对我来说没有意义,而且我看不到产生单个对象的语法。
到目前为止,这是我得到的:
return File.readFile(filepath, 'utf8')
.then((fileContents) => fileContents.split('\n').map((line) => {
// here is where I'd convert the line of tab-separated
// text into an object with named properties
// this is fake, broken syntax
return ({ prop_a: [0], prop_b: [2], prop_c: [1] }) = line.split('\t');
}));
需要注意的几件事:
File.readFile
是围绕Node-native fs.readFile(path, opt, callback)
API的简单ES6 Promise包装器。 我正在寻找一个可以分割
line
并从中任意分配到新创建对象的语句。我认为解构是实现这一目标的正确方法,但也许需要的是创造性地使用休息或传播。// sample input text
Ralphette dog 7
Felix cat 5
// desired output
[ { name: 'Ralphette', species: 'dog', age: '7' },
{ name: 'Felix' , species: 'cat', age: '5' }
]
谢谢你的帮助!
答案
听起来没有办法仅通过销毁来做到这一点。但是,将IIFE引入混合物中可以使异形破坏更少。这是我基于@Amadan的答案使用的代码:
return File.readFile(filepath, 'utf8')
.then((fileContents) => (fileContents.length === 0)
? []
: fileContents
.split('\n')
.map((line) => (([ name, species, age ]) => ({ name, species, age }))(line.split('\t')))
)
这非常简洁,因此,建议不要在实际项目中使用它。
如果几年后有人发现了没有IIFE的方法,我希望他们能发布它。
最佳答案
可能不是您想要的,但最接近的可能是
(x => ({ prop_a: x[0], prop_b: x[2], prop_c: x[1] }))(line.split('\t'));
但这可能是最容易做到的
var parts = line.split('\t');
return { prop_a: parts[0], prop_b: parts[2], prop_c: parts[1] };
虽然我可能被证明是错误的,但我认为您无法通过破坏任务分配来完成所需的工作。
关于javascript - es6从数组分解为对象的语法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36146958/