检测数组中的数字模式

时间:2014-02-27 06:50:52

标签: javascript arrays function design-patterns arithmetic-expressions

我正在努力完成以下练习。我的代码有问题,但我不明白它是什么... 使用JavaScript语言,让函数ArithGeo(arr)获取存储在arr中的数字数组,如果序列遵循算术模式则返回字符串“Arithmetic”,如果它遵循几何图案,则返回“Geometric”。如果序列不遵循任何一种模式返回-1。算术序列是每个数字之间的差异是一致的,其中在几何序列中,第一个之后的每个术语乘以某个常数或公共比率。算术示例:[2,4,6,8]和几何示例:[2,6,18,54]。可以输入负数作为参数,不输入0,并且没有数组将包含所有相同的元素。 我的代码:

function ArithGeo(arr) { 
  if (for (i = 0; i< (arr.length - 2); i++) {
    arr[i+1] - arr[i] == arr[i+2] - arr[i+1];
    }){
    return "Arithmetic";
    } else if (for (i = 0; i< (arr.length - 2); i++) {
    arr[i+1] / arr[i] == arr[i+2] / arr[i+1];
    }){
    return "Geometric";
    } else {
      return -1;
    }
};

当我放置像[5,10,15]这样的数组时,我得到“意外的令牌”。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

修改了你的代码。没有改变逻辑,而是改变它应该写的方式。

function ArithGeo(arr) { 
    var ap, gp;

    for (i = 0; i< (arr.length - 2); i++)  
        if(!(ap = arr[i+1] - arr[i] == arr[i+2] - arr[i+1])) break; 

    if(ap) return "Arithmetic";

    for (i = 0; i< (arr.length - 2); i++)  
        if(!(gp = arr[i+1] / arr[i] == arr[i+2] / arr[i+1])) break;

    if(gp) return "Geometric";

    return -1;    
};

答案 1 :(得分:0)

看起来你正在尝试获取for循环的结果,但是循环没有返回值。考虑在循环外部定义一个布尔变量(最初设置为true),并将它与您在循环内执行的比较结果进行对比;如果循环的每次迭代都是真的,那么变量将在结尾处为真。

例如:

var test = true;
for(var i=0; i<5; i++) {
     test = test && ( i != 6 );
 }
 if(test) {
     alert("i was never 6");
 }