【问题标题】:Create dynamic associative array in javascript [closed]在javascript中创建动态关联数组[关闭]
【发布时间】:2014-07-29 06:19:41
【问题描述】:

索引数组。

var index = ['a','b','c','d'];

索引数组可以有任意数量的项目。

结果是一个关联数组,其键与索引项相同:

result = [{ b:'Val1', c:'Val2', a:'Val3', d:'Val4' },{ b:'Val5', c:'Val6', a:'Val7', d:'Val8' }];

我必须创建另一个具有与索引数组相同顺序的键的数组。

finalRes = [{ a:'Val3', b:'Val1', c:'Val2', d:'Val4' },{ a:'Val7', b:'Val5', c:'Val6', d:'Val8' }];

任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: javascript jquery associative-array


    【解决方案1】:

    不保证 javascript 对象中的属性顺序。如果要指定键的顺序,则必须保留有序的键数组以及生成的数组。

    ECMAScript Third Edition:

    4.3.3 对象 对象是对象类型的成员。它是一个无序的属性集合,每个属性都包含一个基元 值、对象或函数。存储在属性中的函数 对象被称为方法。

    来源:Does JavaScript Guarantee Object Property Order?

    【讨论】:

    • 你觉得这个答案怎么样???
    • 你怎么觉得不是?
    【解决方案2】:

    让我们看看..

    var index = ['a','b','c','d'];
    result = [{ b:'Val1', c:'Val2', a:'Val3', d:'Val4' },{ b:'Val5', c:'Val6', a:'Val7', d:'Val8' }];
    
    finalRes = [{ a:'Val3', b:'Val1', c:'Val2', d:'Val4' },{ a:'Val7', b:'Val5', c:'Val6', d:'Val8' }];
    

    最终结果可以用循环创建;

    var finalRes = [];
    for (var l=0; l<result.length; l++) {
      var res = {};
      for(var x=0; x<index.length; x++) {
         var i = index[x]; //i is the index value..
         res[i] = result[l][i];
      }
    
      finalRes[l] = res;
    }
    

    我相信这应该可行..

    【讨论】:

      【解决方案3】:

      这是您真正想要的完美解决方案:在这里测试jsfiddle。解释见 cmets。

      var index = ['a','b','c','d'];
      result = [{ b:'Val1', c:'Val2', a:'Val3', d:'Val4' },{ b:'Val5', c:'Val6', a:'Val7', d:'Val8' }];
      
      var finalRes = [];
      
      for (var i = 0; i<result.length; i++){
          //We get each slice of result array here
          //Lets begin a fresh array of this particular array
          thisArray = [];
      
          for (var j = 0; j<index.length; j++){
              //Now Preparing the particular Array
              var key = index[j]; //Key of Index Array
              thisArray[key] = result[i][key]
              // What we did just before is:
              // We created an Element Inside this Particular Array with reference of index and value of result
          }
      
          finalRes.push(thisArray);
      
      }
      console.log(finalRes); //Required Array
      console.log(finalRes[0]["a"]); //Checking Elements
      

      小心!

       Caution: The finalRes is NOT NUMERIC. You can't refer it like: finalRes[0][0]
      

      【讨论】:

        猜你喜欢
        • 2010-09-25
        • 2014-10-22
        • 1970-01-01
        • 2010-09-19
        • 2011-03-17
        • 1970-01-01
        相关资源
        最近更新 更多