我正在读取带有制表符分隔值的文件,并且希望将其转换为具有命名属性的哈希数组。

我已经研究了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');
}));

需要注意的几件事:
  • 我将babel与节点v5一起使用。我愿意在需要时加载其他解析或转换插件。
  • 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/

    10-10 02:36