我正在尝试使用jQuery动画来对一些元素进行排序,我的排序映射定义如下:
var mapping = [
[0, 5],
[1, 4],
[2, 3],
[3, 2],
[4, 1],
[5, 0]
];
mapping[0][0]
是元素的索引,mapping[0][1]
是目标索引。
我的解决方案基本上是这样的:
var elements = [1, 2, 3, 4, 5, 6];
for (var i = 0; i < elements.length; i++) {
var clone1 = elements[mapping[i][0]];
var clone2 = elements[mapping[i][1]];
elements[mapping[i][0]] = clone2;
elements[mapping[i][1]] = clone1;
}
console.log(elements);
问题是,我正在处理我正在修改的对象,操作会自动撤消;我得到的不是反转数组,而是返回相同的数组。
如何在JavaScript中像这样交换元素?以下是代码的JSFiddle example。
发布于 2012-05-22 16:00:34
// [source, target]
var mapping = [
[0, 5],
[1, 4],
[2, 3],
[3, 2],
[4, 1],
[5, 0]
];
var elements = [1, 2, 3, 4, 5, 6];
function swapElements(elements, mapping) {
var tmp = new Array(elements.length);
for(var i = 0, l = mapping.length; i < l; i++) {
tmp[mapping[i][1]] = elements[mapping[i][0]];
}
for(var i = 0, l = elements.length; i < l; i++) {
elements[i] = tmp[i];
}
}
swapElements(elements, mapping);
console.log(elements);
发布于 2014-07-26 03:37:23
使用访问器函数的一些函数乐趣
var at = function(arr) { return function(i) { return arr[i] } };
[5,4,3,2,0,1].map( at(['a','b','c','d','e','f']) )
这将返回'f','e','d','c','a','b‘
发布于 2012-05-22 15:53:18
将元素从0交换到5,再从5交换到0 :)尝试
for (var i = 0; i < elements.length / 2; i++)
一切都会好起来的。
Look here
https://stackoverflow.com/questions/10697841
复制相似问题