【发布时间】:2015-04-21 17:40:36
【问题描述】:
我很难把我的大脑包裹在这个周围:/
- (删除负数)给定一个包含多个值的数组 X(例如 [-3,5,1,3,2,10]),编写一个删除数组中所有负数的程序。一旦你的程序完成,X 应该只由正数组成。 这样做不创建临时数组,只使用 pop 方法删除数组中的任何值。
我的想法是通过数组编写一个循环。如果 X[i] 为负数,则开始另一个循环交换 X[j] 和 X[j+1] 直到数组末尾。 (保留数组的顺序)然后使用 pop()。
当我运行脚本时,看起来循环是无限的。此外,如果连续有两个负值,第二个可能会在 i 的下一次迭代中被跳过。有没有更简单的方法?
var X = [1,-6,-7,8,9];
//test= [1,-7,8,-6,9]
temp = 0
for (i = 0;i<X.length-1;i++){
if (X[i]<0){
for (j = i;j<=X.length-1;j++){
X[j] = temp
X[j] = X[j+1]
X[j+1] = temp
}
if(X[X.length-1] < 0){X.pop()}
}
};
console.log(X);
【问题讨论】:
-
您提到保留数组的顺序,但为什么呢?描述中没有提到任何关于保持秩序的内容。
-
你可以
Array.splice吗? -
你是无限循环的,因为你的
j循环中有X[j+1] = temp。当j等于X.length - 1时,这一行将在数组中添加一个额外的条目,导致它再次循环,再次添加和循环并添加......永远
标签: javascript arrays algorithm