3

我需要转换一种类型的 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 的转换。谢谢。

4

1 回答 1

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"}])
);
于 2012-11-26T20:53:47.777 回答