有谁能告诉我这段代码有什么问题
<figure>
它应该从数组中返回一个从给定点开始的数字列表,但只有从0开始才有效。
如果我从6开始,例如我什么都没得到
alert(get_next_num(6,'right',3));
但它应该返回7,0,1
答案 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