2012-11-26 95 views
3

我需要一個類型的JavaScript對象轉換:轉換一種類型的JavaScript對象到另一個

object1: [{"a":"value1", "b":"value2", "c":"value3"}, {"d":"value4","e":"value5","f":"value6"}] 

爲另一種類型的對象:

object2 : {"value1":["value1", "value2", "value3"], "value4":["value4","value5","value6"]} 

我嘗試使用這種功能,它轉換:

function toObject(arr) { 
    var rv = {}; 
    for (var i = 0; i < arr.length; ++i) { 
     rv[i] = arr[i]; 
    } 
    return rv; 
} 

但我得到的數值指標([0],[1]),而不是「value1」和「value4」。你能否給我一些提示,我怎麼做從object1到object2的轉換。謝謝。

+1

再也沒有保證的方式來確定哪個鍵/值對至上中的每個對象,除非你解析數出來的'「VALUE_」'字符串,或者除非你知道''a「,」b「,」c「等等......''鍵將始終是字母表中的每三個字母。 –

+1

...但是如果你的值與所示一致,那麼原始數據結構確實沒有任何理由。你只需要知道數組中有多少個對象,以及每個對象中有多少個鍵,所以你可以使用'[3,3]'來獲得你的結果。 –

+0

我同意user1689607,如果你的值是如此獨特,你可以直接用指針訪問值 – PitaJ

回答

2

你想要的是連接向量的囚犯?

嘗試:

function toObject(arr) { 
    var rv = {}, k; 
    for (var i = 0; i < arr.length; ++i) { 
    for(k in arr[i]){ 
     rv[k] = arr[i][k]; 
    } 
    } 
    return rv; 
} 

如果這不是你在找什麼,然後試試這個:

[(與用戶幫助@user1689607)固定] [編輯]

Object.keys在舊版瀏覽器中無效。 [修正]

function toObject(arr,_sort) { 
    //param1 = Object, param2 = (true:sort, false:default) 
    var rv = {}, k, firstV = null, keys, obj, tmp, j, 
     ObjK = Object.keys ? function(ke){ 
      return Object.keys(ke); 
     } : function(ke){ 
      var r = []; 
      for(var o in ke){ 
       r[r.length] = o; 
      } 
      return r; 
     }; 

    for (var i = 0; i < arr.length; ++i) { 
     obj = arr[i]; 
     tmp = []; 
     keys = _sort===true ? ObjK(obj).sort() : ObjK(obj); 
     tmp = [obj[keys[0]]]; 
     for (j = 0; j < keys.length; ++j) { 
      tmp[tmp.length] = obj[keys[j]]; 
     } 
     rv[obj[keys[0]]] = tmp; 
     firstV = null; 
    } 
    return rv; 
} 

//sort 
console.log(
    toObject([{"a":"value1", "b":"value2", "c":"value3"}, {"d":"value4","e":"value5","f":"value6"}]), 
true); 

//default 
console.log(
    toObject([{"a":"value1", "b":"value2", "c":"value3"}, {"d":"value4","e":"value5","f":"value6"}]) 
); 
+1

你的'firstV'的麻煩在於ECMAScript允許一個實現自己決定枚舉的順序,當使用'for -in'。換句話說,沒有保證的順序,所以不能保證枚舉中的第一項是你期望的,例如'「value1」'和'「value4」'。 –

+0

我明白了!爲你+1。 –

+0

謝謝。這是我正在尋找的暗示。 – user1853892

相關問題