我正在尝试用字符串输入创建一个数组 条件。 这似乎不是一种使用push的有效方法,因为它不会返回只是数字的数组。
function evaluate(input){
function isOperator(ops){
if(ops == '+' || ops == '*'){
return true;
} return false;
}
var stack = [];
for(var char in input){
if(!isOperator(char)){
stack.push(input[char]);
}
}
return stack;
}
console.log(evaluate('7+**8'));
答案 0 :(得分:2)
此行正在测试索引是否为运算符。这不是因为索引总是数字。
if(!isOperator( char )){ // char => 0, 1, 2, 3, 4
// ^^^^
下一行使用索引从input
字符串中访问单个字符:
stack.push( input[char] ); // input[char] => '7', '+', '*', '*', '8'
// ^^^^^^^^^^^
这是重命名变量以避免混淆的好时机。
for (var index in input) {
var char = input[index];
if (!isOperator(char)) {
stack.push(char);
}
}
另外,将循环类型更改为one more suited for ordered collections。
答案 1 :(得分:2)
您的代码存在许多问题。
for(var char in input)
没有做你想做的事。它像对象一样迭代它。使用for (var i = 0; i < input.length; i++)
。它不会有效率,但您也可以input.split().reduce(...)
。
input[char]
将导致undefined
,因为input['c']
或类似内容不会存在。但是,切换到i
作为索引将解决这个问题。
function evaluate(input){
function isOperator(ops){
if(ops == '+' || ops == '*'){
return true;
}
return false;
}
var stack = [];
for(var i = 0; i < input.length; i++){
var char = input[i];
if(!isOperator(char)){
stack.push(char);
}
}
return stack;
}
console.log(evaluate('7+**8'));
或者reduce
:
return input.split().reduce(function (stack, value) {
if (isOperator(value)) {
return stack;
}
return stack.concat(value);
}, []);
答案 2 :(得分:0)
function evaluate(input){
function isOperator(ops){
if(ops == '+' || ops == '*'){
return true;
} return false;
}
var stack = [];
for(var char in input){
if(!isOperator(char)){
stack.push(input[char]);
}
}
return stack;
}
console.log(evaluate('7+**8'));
假设您正在尝试按我的想法行事,这应该可行。你不能像JS那样做一个关联数组,但除此之外它看起来很好。确保您知道自己要调用的变量。
答案 3 :(得分:0)
您甚至无法检查输入是"+"
还是"*"
。您只是从false
方法返回isOperator(ops)
,因为您的for循环只是从input
方法计算evaluate(input)
值索引。因此,您需要对其进行修复,以便检查"+"
和"*"
运算符。
答案 4 :(得分:0)
这是你想要的输出吗?
[
"7",
"8"
]
如果是这样,其他人已经用语法巧妙地解释了这些问题:for key in obj
迭代对象,而不是数组。如果要以“传统”方式将字符串迭代为数组,则可以使用常规for
循环:
function evaluate(input) {
var output = [];
for (var n = 0; n < input.length; n++) {
if (! (input[n] === '*' || input[n] === '+')) output.push(input[n]);
}
return output;
}
console.log(evaluate('7+**8'));
但你不必。如果您只想要所有数字而不需要操作符,那么这可能会赢得code golf挑战:
function evaluate(input) {
return input.match(/\d/g);
}
console.log(evaluate('7+**8'));