JavaScript如何改变数组元素的位置

8

我有一个JavaScript的嵌套数组,像这样:

testArray['element1'] = {par1: "value1", par2: "value2" ... }
testArray['element2'] = {par1: "value1", par2: "value2" ... }
testArray['element3'] = {par1: "value1", par2: "value2" ... }
testArray['element4'] = {par1: "value1", par2: "value2" ... }

所以我该怎么改变元素的位置呢?例如,将其替换为

之外的位置。
("element1", "element2", "element3","element4")
to be
("element4", "element2", "element3","element1")
or
("element1", "element4", "element3","element2")

1
'element1' = { 不是有效的语法。您是否有一个对象数组?如果是这种情况,它应该是:array = [{'element1':{'par1':...}}, {'element2':{'par1':...}}] 或者,您的数组实际上是一个关联数组(又名js对象)。在这种情况下,它应该是:array = {'element1':{'par1':..}, 'element2':{'par1':...}} - driangle
这不是真正有效的代码 - 你是在尝试构建一个对象吗? - Stephen
你的代码真正是什么样子? - epascarello
3
您所描述的不是一个数组,而是使用JSON符号表示的JavaScript对象。因此,它不是一个数组,其中元素没有顺序,您无法“改变位置”。 - Andreas Köberle
我认为这个问题应该被删除,因为它没有正确描述其目标,也没有使用正确的语言术语。这是一个误导性的标题和描述不清的问题。要么就需要进行大量编辑,要么就需要删除。 - ADJenks
6个回答

7

首先,正确地构建对象:

array = {
  'element1' : {par1: 'value1', par2: 'value2', par3: 'value3'....},
  'element2' : {par1: 'value1', par2: 'value2', par3: 'value3'....},
  'element3' : {par1: 'value1', par2: 'value2', par3: 'value3'....},
  'element4' : {par1: 'value1', par2: 'value2', par3: 'value3'....}
}

然后交换:

var tmp = array['element2'];
array['element2'] = array['element1'];
array['element1'] = tmp;

9
抱歉,你所描述的不是一个数组,而是一个简单的JavaScript对象。因此,改变顺序没有意义,因为你无法迭代它。 - Andreas Köberle
1
@AndreasKöberle 这里没有顺序,他们的帖子在交换值。 - epascarello
@AndreasKöberle:OP的问题有些模糊和不完整。我提供一种可能有用的选项,但他没有说到迭代。 - 001
这个问题是关于数组的,数组的一个常见行为是可以对其进行迭代。当提问者提出模糊的问题时,在确定他真正想要什么之前回答它有什么意义呢?我的意思是,如何在模糊的问题下给出正确的答案。 - Andreas Köberle
2
是的,唯一有效的答案是完全死板和尽可能狭窄的答案。没有其他答案可能有所帮助。我很抱歉。 - 001
在我看来,更好的做法是纠正提问者的问题,而不是直接回答错误的问题。否则,你最终会做出像“正确构建数组”然后却构建了一个对象这样的事情。 - Charlie Martin

7

你在问题中发布的不是一个数组,甚至不是有效的JavaScript语法。由于你问到了顺序,我会假设你没有将对象用作JavaScript中没有保证顺序的对象。

话虽如此,我将假设你已经声明了一个数组,如下所示:

var testArray = [{ ... }, { ... }, { ... }];

为了交换两个元素,你只需要一个通用的交换函数:

var swap = function(theArray, indexA, indexB) {
    var temp = theArray[indexA];
    theArray[indexA] = theArray[indexB];
    theArray[indexB] = temp;
};

swap(testArray, 0, 1);

http://jsfiddle.net/jbabey/gRVn5/


2

you can add it as an array prototype like so:

Array.prototype.swap = function (index1, index2) {
    if (index1 <= this.length && index2 <= this.length) {
        var temp = this[index2];
        this[index2] = this[index1];
        this[index1] = temp;
    }
};

1
arr = [0,1,2,3];
a = arr[3];
arr[3] = arr[0];
arr[0] = a;

0

现在你可以做到:

let list = [1,2,3,4];
[list[1],list[3]] = [list[3],list[1]];

//Result: [1,4,3,2]

0

我会写一个交换函数。

var letters = "abcdefghijklmnopqrstuvwxyz".split("");

function swap(theArray, index1, index2) {
  var temp = theArray[index2];
  theArray[index2] = theArray[index1];
  theArray[index1] = temp;
}

swap(letters, 2, 25); // swap "c" and "z"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接