为什么不能将哈希分配给javascript中的变量?

时间:2019-07-17 13:03:44

标签: javascript variables

我需要将其转换为:

int

进入

int maxi = Character.digit(String.valueOf(N).charAt(0), 10);

当我尝试将prev = {in_progress: 1, todo: 3, done: 1} 分配给变量时,它会被分配。

output = {[ ['Status', 'Count'], ['Todo', 3], ['In Progress', 1], ['Done', 1] ]}

成功。

但是当我尝试将prev分配给变量时,它会引发错误

let a = {in_progress: 1, todo: 3, done: 1}

您能解释一下这背后的原因吗?

2 个答案:

答案 0 :(得分:1)

问题在于{[ ['Status', 'Count'], ['Todo', 3], ['In Progress', 1], ['Done', 1] ]}不是有效的对象文字。只是列表列表中的花括号。对象文字必须具有键:值对。

如果您想将其变成一个对象,它将看起来像{ 'Status': 'Count', 'Todo': 3, 'In Progress': 1, 'Done': 1 }

如果您已经有了列表列表,并希望通过编程将其变成对象,则可以使用reduce

// Note: no braces
let kvlist = [ ['Status', 'Count'], ['Todo', 3], ['In Progress', 1], ['Done', 1] ];
let obj = kvlist.reduce((h,[k,v]) => { h[k] = v; return h },{});

答案 1 :(得分:0)

您可以获取条目并使用该值映射格式化的密钥。

const format = s => s.split('_').map(([c, ...s]) => [c.toUpperCase(), ...s].join('')).join(' ');

var prev = { in_progress: 1, todo: 3, done: 1 },
    result = [
        ['Status', 'Count'],
        ...Object.entries(prev).map(([k, v]) => [format(k), v])
    ];

console.log(result);