循环内移动阵列
Shifting array within loop
我有一个数组,我想移动它n次并返回一个新的移位数组数组。
如 [1,2,3,4] 变成
[[ 1, 2, 3, 4 ],
[ 2, 3, 4, 1 ],
[ 3, 4, 1, 2 ],
[ 4, 1, 2, 3 ],
[ 1, 2, 3, 4 ],
[ 2, 3, 4, 1 ],
...
用
function dataShift(len, inp){
var row = inp;
var rows = [];
for (var i=0;i<len;i++) {
row.push(row.shift());
rows.push(row);
console.log(rows[i]);
}
return rows;
}
console.log(dataShift(5,[1,2,3,4]));
console.log(rows[i])
将打印所需的结果,但是console.log(dataShift(5,[1,2,3,4]))
仅包含原始数组的最后一次排列len
次。
怎样才能达到我想要的结果?
function dataShift(len, inp){
var row = inp;
var rows = [];
for (var i=0;i<len;i++) {
row.push(row.shift());
var new1 = row.slice(0,len);
rows.push(new1);
}
return rows;
}
console.log(dataShift(5,[1,2,3,4]));
var new1 = row.slice(0, len)
线是魔力所在。 row.slice
创建一个新的数组对象。
您之前的方法(直接推送)最终会生成一个指向同一对象的对象引用数组。因此,当您修改对象时,所有引用都会更新。
如果您不想使用slice()
,另一种方法是使用 JSON.parse(JSON.stringify(row))
public static int [] leftSwap(int [] arr, int n) {
int l = arr.length;
int [] result = new int[l];
int m = 0 ;
int criticalIndex = l - n ;
for(int i = 0 ; i <result.length ; i++) {
if(i < criticalIndex) {
result[i] = arr[n];
n++;
}
else {
result[i] = arr[m];
m++;
}
}
return result;
}
相关文章:
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- 正在SharePoint 2013母版页中添加JQuery移动文件
- 如何在android中使用phonegap将文件从一个文件夹移动/复制到另一个文件夹
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- FabricJs-限制主对象内添加对象的移动区域
- 如何从画布上的某个移动事件中获取X和Y
- 触摸移动时切换到新元素
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- 停止jQuery UI滑块移动超过给定值
- 谷歌地图API v3不适用于移动浏览器或PhoneGap
- 如何将chrome扩展功能移植到移动设备(特别是jquery和trello)
- JQuery移动动态分区页面
- XMLHttpRequest在移动设备上的chrome上不起作用
- 如何使bxslider仅在移动视图中处于活动状态
- css停止图像在滚动中移动
- jquery移动对齐按钮取决于内容大小
- 利用移动设备上的滑动功能浏览图像阵列
- 循环内移动阵列
- 如何在图像阵列/对象中前后移动
- 如何检测项目在可观察阵列之间的移动