首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaScript:按索引交换数组值

JavaScript:按索引交换数组值
EN

Stack Overflow用户
提问于 2012-05-22 15:44:52
回答 6查看 3.2K关注 0票数 1

我正在尝试使用jQuery动画来对一些元素进行排序,我的排序映射定义如下:

代码语言:javascript
运行
复制
var mapping = [
  [0, 5],
  [1, 4],
  [2, 3],
  [3, 2],
  [4, 1],
  [5, 0]
];

mapping[0][0]是元素的索引,mapping[0][1]是目标索引。

我的解决方案基本上是这样的:

代码语言:javascript
运行
复制
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

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-05-22 16:00:34

代码语言:javascript
运行
复制
// [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);​
票数 2
EN

Stack Overflow用户

发布于 2014-07-26 03:37:23

使用访问器函数的一些函数乐趣

代码语言:javascript
运行
复制
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‘

票数 1
EN

Stack Overflow用户

发布于 2012-05-22 15:53:18

将元素从0交换到5,再从5交换到0 :)尝试

代码语言:javascript
运行
复制
for (var i = 0; i < elements.length / 2; i++)

一切都会好起来的。

Look here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10697841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档