【问题标题】:Javascript change place of array elementJavascript更改数组元素的位置
【发布时间】:2012-09-03 16:54:24
【问题描述】:

我在 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")

【问题讨论】:

  • 'element1' = { 语法无效。你有一个对象数组吗?在这种情况下,它将是:array = [ {'element1':{'par1':...}}, {'element2':{'par1':...}}] 或者您的数组实际上是一个关联数组(又名 js 对象)。在这种情况下,它将是:array = {'element1':{'par1'..}, 'element2':{'par1':...}}
  • 这不是真正有效的代码 - 您是在尝试构建一个对象吗?
  • 你的代码到底是什么样子的?
  • 你描述的不是数组,而是 JSON 表示法的 JavaScript 对象。因此,由于这不是数组,因此其中的元素没有顺序,您不能“更改位置”。
  • 我认为这个问题应该被删除,因为它没有正确描述它的目标,也没有使用正确的语言术语。这是一个误导性的标题,也是一个描述不佳的问题。要么这样,要么需要进行相当多的编辑。

标签: javascript arrays replace nested element


【解决方案1】:

您现在可以这样做:

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

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

【讨论】:

    【解决方案2】:

    首先,正确构建对象:

    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;
    

    【讨论】:

    • 对不起,您描述的不是一个数组,而是一个简单的 JavaScript 对象。因此,更改顺序没有任何意义,因为您无法对其进行迭代。
    • @AndreasKöberle 这里没有顺序,他们的海报正在交换值。
    • @AndreasKöberle:OP 的问题有些模糊和不完整。我提出了一种可能有帮助也可能没有帮助的选项。他没有说要迭代它。
    • 问题是关于数组的,数组的一个常见行为是您可以迭代它。当 OP 提出模糊的问题时,在您确定他真正想要什么之前回答它有什么意义。我的意思是你怎么能对一个模糊的问题给出正确的答案。
    • 是的,唯一有效的答案是那些完全归类且尽可能狭窄的答案。没有其他答案可能有帮助。我很抱歉。
    【解决方案3】:

    您可以像这样将其添加为数组原型:

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

    【讨论】:

      【解决方案4】:
      arr = [0,1,2,3];
      a = arr[3];
      arr[3] = arr[0];
      arr[0] = a;
      

      【讨论】:

        【解决方案5】:

        我只是写一个交换函数。

        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"
        

        【讨论】:

          【解决方案6】:

          您在问题中发布的内容不是数组,甚至不是有效的 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/

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-09-21
            • 1970-01-01
            • 2016-09-28
            • 2017-12-09
            • 2018-08-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多