我坚持这个算法挑战,无法找到一种方法。我试图避免使用.shift()方法。
我们说我有一个" var x = [1,5,10,7,-2]"我想要做的是将一个点移到左边,同时删除数组中的第一个项目,即#34; 1"。另外我想在数组的末尾添加0以替换该点。目标是使数组成为" var x = [5,10,7,-2,0]",我会想象使用for循环来实现这一点。所以我基本上交换了数组的第一个成员,并在数组的末尾交换为0。
我不允许使用反向或排序方法。我唯一允许使用这个问题的方法是.length。 .pop或.push。我也可以使用for循环和if else语句。这些是我的限制。
答案 0 :(得分:2)
您可以使用for循环
NumericVector
答案 1 :(得分:2)
甚至更短......
for (var i = 0; i < x.length; i += 1) {
x[i] = x[i + 1] || 0;
}
答案 2 :(得分:0)
如果您希望维护稀疏数组并且只有一个循环可供使用,那么算法需要在复制之前测试成员:
function shiftLeft(arr) {
for (var i=1, iLen=arr.length; i<iLen; i++) {
if (arr.hasOwnProperty(i)) {
arr[i-1] = arr[i];
} else {
delete arr[i-1];
}
}
arr[i-1] = 0;
return arr;
}
可以简化为:
function shiftLeft(arr) {
for (var i=1, iLen=arr.length; i<iLen; i++) {
arr.hasOwnProperty(i)? arr[i-1] = arr[i] : delete arr[i-1];
}
arr[i-1] = 0;
return arr;
}
哪个代码少,但不是那么简单,也可能更慢。