gpt4 book ai didi

JavaScript:对数组中的整数和运算符进行排序

转载 作者:行者123 更新时间:2023-12-03 01:29:58 25 4
gpt4 key购买 nike

这是我的jsfiddle:JSFIDDLE

所以,我试图获得显示 3 个不同对象的输出:

// Wanting to get 
// {
// 0: {type: "number", value: 22},
// 1: {type: "operator", value: "+"},
// 2: {type: "number", value: 22},
// }

function lexer(contents) {
const tokens = [];

while (contents.length) {
let char = contents[0];
contents = contents.slice(1);

if (/[-+*\/]/.test(char)) {
tokens.push({ type: 'operator', value: char });
}

let number = '';
while (/[1-9]/.test(char)) {
number += char;
char = contents[0];
contents = contents.slice(1);
}

if (number !== '') {
tokens.push({ type: 'number', value: parseInt(number, 10) });
}
}
return tokens;
}

const result = lexer(["2", "2", "+", "2", "2"]);

现在我要填写更多文本。我不太确定这段代码有什么问题,因为它似乎跳过了其中一个输出。我猜这与 while 循环有关。

最佳答案

您的问题是您在验证它是一个数字之前对内容进行了切片。因此,当它到达 + 时,它已经在推送 token 之前将其从数组中切掉了,并且当下一个条件为 contents.length 的循环到来时, plus 将被删除,并且您无法知道它在那里。

我建议不要在读取字符后立即进行切片,而是仅在以某种方式使用该字符后进行切片,即在推送操作符 token 或将字符附加到number之后>.

function lexer(contents) {
const tokens = [];

while (contents.length) {
let char = contents[0];

if (/[-+*\/]/.test(char)) {
tokens.push({ type: 'operator', value: char });
contents = contents.slice(1);
}

let number = '';
while (/[1-9]/.test(char)) {
number += char;
contents = contents.slice(1);
char = contents[0];
}

if (number !== '') {
tokens.push({ type: 'number', value: parseInt(number, 10) });
}
}
return tokens;
}

这是一个微妙的差异,但这样在使用数据之前您不会更改数组,从而确保一致性。

更新的 fiddle :https://jsfiddle.net/semhw54y/10/

关于JavaScript:对数组中的整数和运算符进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51345818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com