首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何动态设置约简函数中的键

如何动态设置约简函数中的键
EN

Stack Overflow用户
提问于 2016-02-15 16:39:10
回答 2查看 1.3K关注 0票数 2

我有一个.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]

我的代码如下所示。任何建议都会感激地收到:)

代码语言:javascript
运行
复制
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
    }, [])    

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-15 16:43:45

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

代码语言:javascript
运行
复制
// ...
.reduce((quantities, item) => {
    quantities[item[0]] = item[1];
    return quantities;
}, {});

生成的output对象随后(以JSON符号表示):

代码语言:javascript
运行
复制
{
  "A": 9,
  "B": 2,
  // ...
  "Z": 1
}

编辑:注意值类型

如果您希望该值是一个实际数字,则必须在赋值中解析它:

代码语言:javascript
运行
复制
parseInt(item[1], 10)
票数 6
EN

Stack Overflow用户

发布于 2016-02-15 16:44:45

要动态创建密钥(属性名称),您需要执行以下两项操作之一:

  1. 在ES5和更早版本中,您必须创建对象,然后设置属性: 变量O= {};o[item] = item1;
  2. 在ES2015 (又名ES6)和更高版本中,您可以通过[]在属性初始化器中使用动态属性名称: // ES2015 (ES6)只有quantities.push({ [项目]:item1 })

尽管如此,我还是会以不同的方式来解决这个问题,我使用regex,最后得到一个由字母而不是对象数组组成的对象:

代码语言:javascript
运行
复制
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] ):

代码语言:javascript
运行
复制
console.log(quantities.A); // 9
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35414539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档