从给定点开始从数组中获取n个数字

时间:2015-09-06 18:52:03

标签: javascript math

有谁能告诉我这段代码有什么问题

<figure>

它应该从数组中返回一个从给定点开始的数字列表,但只有从0开始才有效。

如果我从6开始,例如我什么都没得到

alert(get_next_num(6,'right',3));

但它应该返回7,0,1

3 个答案:

答案 0 :(得分:2)

此解决方案从list[point]开始:

var list = [0, 1, 2, 3, 4, 5, 6, 7];

function get_next_num(point, direction, count) {
    var results = [],
        dir = direction === 'left' ? -1 : 1,     // used as a factor for the index
        i, index;
    for (i = 0; i < count; i++) {                // simple count up, no hassle
        index = (point + i * dir) % list.length; // calculate the index
        if (index < 0) {                         // and respect boundaries
            index += list.length;                // add length to get a positive number
        }
        results.push(index);                     // push the value
    }
    return results;
}
document.write('<pre>' + JSON.stringify(get_next_num(6, 'right', 3), 0, 4) + '</pre>');
document.write('<pre>' + JSON.stringify(get_next_num(2, 'left', 8), 0, 4) + '</pre>');

此解决方案启动

  • 来自direction = 'right'
  • list[point + 1]
  • 来自direction = 'left'
  • list[point - 1]

var list = [0, 1, 2, 3, 4, 5, 6, 7];

function get_next_num(point, direction, count) {
    var results = [],
        dir = direction === 'left' ? -1 : 1,     // used as a factor for the index
        i, index;
    for (i = 1; i <= count; i++) {               // simple count up, no hassle
        index = (point + i * dir) % list.length; // calculate the index
        if (index < 0) {                         // and respect boundaries
            index += list.length;                // add length to get a positive number
        }
        results.push(index);                     // push the value
    }
    return results;
}
document.write('<pre>' + JSON.stringify(get_next_num(6, 'right', 3), 0, 4) + '</pre>');
document.write('<pre>' + JSON.stringify(get_next_num(2, 'left', 8), 0, 4) + '</pre>');

答案 1 :(得分:0)

你使用for循环错了。您应该i开始0,而不是point。如果您从point开始,比如示例i=6,那么要运行的循环的条件是i<count,这意味着6<3这是错误的,所以循环从未得到开始。

它应该是这样的:

function get_next_num(point, direction, count){
  var results = []; 
  j = 1;
  index = point
  if(direction == 'left'){
          j = -1;
  }
  for(i = 0; i < count; i++){
      index = index + j;
      if(index > list.length - 1)
          index = 0;

      if(index < 0)
          index = list.length - 1;      

      results.push(list[index]);
  }

  return results;
}

答案 2 :(得分:0)

function get_ex_num(point,direction,count){
    var results=[];
    if(direction=='right'&&point<count)return'error';
    else if(count<point)return'error';

    for(i=point;i<count;((direction=='right')?i++:i--)){//might case error but hey ho you get the idea and worth a try :p
        results.push(list[i]);
    }
    return results;
}

我还没有测试任何我会留给你的东西;)

您的问题是,当您离开方向时,您会误导i。这并没有改变它只改变i的方向。方向由++和/或--确定。

当我离开方向时,我就这样做了。 count必须低于run to run。当方向正确时,计数必须高于点。

您可以像这样使用此功能。

norm=get_ex_num(0,'left',7);
backwards=get_ex_num(7,'right',6);
error=get_ex_num(4,'left',5);
error2=get_ex_num(5,'right',4);

如果我犯了一个错误,请继续对我说我今天感冒了大约7个小时的wordpress插件DX

您编码的另一个原因是i只是一个索引。它不是list的关键值。

如果我犯了错误,可能是因为list[i]

如果它不起作用,请检查一下:)

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf