我有一个.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]。
我的代码如下所示。任何建议都会感激地收到:)
import fs from 'fs'
var output = fs.readFileSync('scrabble-quantities.txt', 'utf-8')
.trim()
.split(', ')
.map(item => item.split('-'))
.reduce((quantities, item) => {
quantities.push({
item[0]: item[1]
})
return quantities
}, []) 谢谢
发布于 2016-02-15 16:43:45
我会使用一个对象而不是一个数组。JS的工作方式更简单、更自然:
// ...
.reduce((quantities, item) => {
quantities[item[0]] = item[1];
return quantities;
}, {});生成的output对象随后(以JSON符号表示):
{
"A": 9,
"B": 2,
// ...
"Z": 1
}编辑:注意值类型
如果您希望该值是一个实际数字,则必须在赋值中解析它:
parseInt(item[1], 10)发布于 2016-02-15 16:44:45
要动态创建密钥(属性名称),您需要执行以下两项操作之一:
[]在属性初始化器中使用动态属性名称:
// ES2015 (ES6)只有quantities.push({ [项目]:item1 })尽管如此,我还是会以不同的方式来解决这个问题,我使用regex,最后得到一个由字母而不是对象数组组成的对象:
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";
var quantities = {};
str.match(/[A-Z]-\d/g).forEach(function(entry) {
quantities[entry.charAt(0)] = +entry.replace(/.-/, '');
});
console.log(quantities);
然后,查找字母的数量将变为quantities.A (如果letter是包含"A"的变量,则为quantities[letter] ):
console.log(quantities.A); // 9https://stackoverflow.com/questions/35414539
复制相似问题