在javascript中创建动态关联数组

时间:2014-07-29 06:19:41

标签: javascript jquery associative-array

索引数组。

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

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

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

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' }];

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

3 个答案:

答案 0 :(得分:1)

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

ECMAScript Third Edition

  

4.3.3对象对象是Object类型的成员。它是一个无序的属性集合,每个属性都包含一个原语   价值,对象或功能。存储在属性中的函数   对象称为方法。

来源:Does JavaScript Guarantee Object Property Order?

答案 1 :(得分:0)

让我们看看..

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;
}

我相信这应该有效..

答案 2 :(得分:0)

以下是您完全想要的完美解决方案:在此处进行测试jsfiddle。请参阅说明的注释。

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]