javascript - 字符串元素和对象键值

标签 javascript arrays string object foreach

感谢您的阅读

假设我有这组输入:

const S = "1C 5A 10F 1F 5E"; //Int are rows and Char are columns (ie. seat in a movie theater)
const N = 10; // Number between 1 to 100000
const Ob = { "A": 1, "B": 2, "C": 3,"D": 5, "E": 7, "F": 11, "G": 13,"H": 17, "J": 19, "K": 23};

我想创建一个数组大小 N其中:

  • Int值减 1 就是数组中的位置。

  • Char用于获取 Ob 中的值并将其添加到Array中其对应的Int的位置.

  • 如果 Int 的值重复(同一行中的值),该位置的数组中的值应将前一个值与 Ob 中的字符的新值相乘。

例如(给定上面提供的值):

  • 1C来自S应该分配 C 的值来自Ob在数组的位置 0 中,使得
A[0] === 3;
  • 如果我们对上述所有输入执行此操作,结果应为
A = [33, 0, 0, 7, 0, 0, 0, 0, 0, 11]

我已经成功地用下面的代码做到了

//Resulting Array
A = Array(N).fill(0)

//Get string Int and Char into two arrays
let Columns = S.replace(/\d/g,'').split(' ');
let Rows = S.replace(/[A-K]/g,'').split(' ').map(Number);

//Replace values in A based on Rows and Columns values
Rows.forEach((value,i) => {A[value - 1] === 0 ? arrA[value - 1] = Ob[Columns[i]] : A[value - 1] = Ob[Columns[i]] * A[value - 1]});

但我确信必须有一种更有效的方法在 char 中仅循环一次( charS ) 。就像下面的代码一样。我的主要问题是管理 Int 的位数(即 1、10、100、1000、10000 等),如果按字符循环字符串,则使用空格作为分隔符。

A = [...S].forEach(char => {});

感谢您的帮助。

最佳答案

您可以拆分字符串,通过获取整数和字母部分来减少位置,并分配索引或 1 处的值相乘的结果。

const
    data = "1C 5A 10F 1F 5E",
    length = 10,
    object = { "A": 1, "B": 2, "C": 3, "D": 5, "E": 7, "F": 11, "G": 13, "H": 17, "J": 19, "K": 23 },
    result = data
        .split(' ')
        .reduce(
            (r, position) => {
                var  [i, key] = position.match(/\d+|\D/g);
                i--;
                r[i] = (r[i] || 1) * object[key];
                return r;
            },
            Array.from({ length }, _ => 0)
        );

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 字符串元素和对象键值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60712720/

相关文章:

javascript - 在 React 中将对象从数组移动到数组到另一个对象时镜像位置

c - C语言中如何检查字符串

javascript - 在浏览器中保存二进制数据,下载时无需进行 UTF8 编码

javascript - 如何使用 JSON 文件中的内容填充 Google Maps API InfoWindow

java - 为什么我无法将对象添加到 Object[] 数组?

java - 同步死锁(String intern())

java - 如何制作文件名字符串?

javascript - 露天 : how to call share webscript from client js and extract JSON data

javascript - 绑定(bind)到流程图.js 中的行

JavaScript array.prototype 如何将 'this' 设置为方法获取的新数组