Javascript 如何在reduce函数中动态设置密钥

Javascript 如何在reduce函数中动态设置密钥,javascript,Javascript,我有一个.txt文件,其中包含所有拼字字母数量: A-9、B-2、C-2、D-4、E-12、F-2、G-3、H-2、I-9、J-1、K-1、L-4、M-2、N-6、O-8、p-2、Q-1、R-6、S-4、T-6、U-4、V-2、W-2、X-1、Y-2、Z-1 我试图从中得到一个对象数组,其中键是字母,值是数字 我遇到的问题是,我正在尝试将密钥设置为数组中的第一个项(我之前拆分了该项)[A,9] 我的代码如下。如有任何提示,我们将不胜感激:) 谢谢我会使用对象而不是数组。JS的工作方式更简单、更自

我有一个.txt文件,其中包含所有拼字字母数量:

A-9、B-2、C-2、D-4、E-12、F-2、G-3、H-2、I-9、J-1、K-1、L-4、M-2、N-6、O-8、p-2、Q-1、R-6、S-4、T-6、U-4、V-2、W-2、X-1、Y-2、Z-1

我试图从中得到一个对象数组,其中键是字母,值是数字

我遇到的问题是,我正在尝试将密钥设置为数组中的第一个项(我之前拆分了该项)
[A,9]

我的代码如下。如有任何提示,我们将不胜感激:)


谢谢

我会使用对象而不是数组。JS的工作方式更简单、更自然:

// ...
.reduce((quantities, item) => {
    quantities[item[0]] = item[1];
    return quantities;
}, {});
由此产生的
输出
对象是(JSON表示法):

编辑:注意值类型

如果希望该值为实际数字,则必须在赋值中使用以下公式对其进行解析:

parseInt(item[1], 10)
要动态创建密钥(属性名称),需要执行以下两项操作之一:

  • 在ES5及更早版本中,必须创建对象,然后设置属性:

       var o = {};
       o[item[0]] = item[1];
    
  • 在ES2015(又称ES6)及更高版本中,您可以通过
    []
    在属性初始值设定项中使用动态属性名称:

       // ES2015 (ES6) ONLY
       quantities.push({
           [item[0]]: item[1]
       })
    

  • 也就是说,我对这个问题的看法不同,使用正则表达式,最终得到的是一个由字母键控的对象,而不是一个对象数组:

    var str=“A-9、B-2、C-2、D-4、E-12、F-2、G-3、H-2、I-9、J-1、K-1、L-4、M-2、N-6、O-8、P-2、Q-1、R-6、S-4、T-6、U-4、V-2、W-2、X-1、Y-2、Z-1”;
    变量数量={};
    str.match(/[A-Z]-\d/g).forEach(函数(条目){
    数量[输入字符(0)]=+条目。替换(/.-/,“”);
    });
    
    控制台日志(数量)
    您希望生成的数组是什么?
    reduce()
    的初始值不应该是
    {}
    而不是
    []
    ?太好了!我错过了:)谢谢。你错过了从字符串到整数的值转换@谢谢,我添加了它作为编辑,因为它不确定他想要的值是数字还是数字。邪恶-再次感谢伙计们-parseInt是我所需要的。@Pointy:谢谢你的排错修复!
       var o = {};
       o[item[0]] = item[1];
    
       // ES2015 (ES6) ONLY
       quantities.push({
           [item[0]]: item[1]
       })