0

这让我很头疼,如果这里有任何慷慨的 javascript 大师,我将不胜感激

我想要实现的是:

鉴于这种:

var keys   = ["Age", "Name", "Photos", { "Friends": ["FirstName", "LastName"] }];
var values = [ [31, "Bob", ["1.jpg", "2.jpg"], [ ["Bob", "Hope"], ["Foo", "Bar"] ] ], [21, "Jane"] ["4.jpg", "5.jpg"], [ ["Mr", "T"],["Foo", "Bar"] ] ];

我想找回这个:

var object = [
                {
                "Age"    : 31,
                "Name"   : "Bob",
                "Photos" : ["1.jpg", "2.jpg"]
                "Friends": [ 
                               {
                                   "FirstName": "Bob",
                                   "LastName" : "Hope"
                                },
                                {
                                    "FirstName": "Foo",
                                    "LastName" : "Bar"
                                }
                ] 
            },
            {
                "Age"     : 21,
                "Name"    : "Jane",
                "Photos" : ["4.jpg", "5.jpg"]
                "Friends": [ 
                               {
                                   "FirstName": "Mr",
                                   "LastName" : "T"
                                },
                                {
                                    "FirstName": "Foo",
                                    "LastName" : "Bar"
                                }
                ] 
            }               
];

这是我正在处理的规范提案(JsonR

目前我能够(几乎)解决这个问题(但不能更深入......):

var keys   = ["Age", "Name", "Photos" ];
var values = [ [31, "Bob", ["1.jpg", "2.jpg"]], [21, "Jane", ["4.jpg", "5.jpg"]] ];

感谢您的任何反馈或帮助!

4

2 回答 2

2

这是一个执行我认为您想要的功能的功能:

function keyValuesToObject(keys, values) {
    var obj = [];
    for (var i = 0; i < values.length; i++) {
        var value = values[i];
        obj.push({});
        for (var j = 0; j < value.length; j++) {
            var key = keys[j];
            if (typeof key === "object") {
                for (var k in key) {
                    obj[i][k] = keyValuesToObject(key[k], value[j]);
                }
            }
            else {
                obj[i][key] = value[j];
            }
        }
    }
    return obj;
};

它不处理格式错误的输入,因此您可能希望根据您打算如何使用它来检查。

您可以在此在线 jsFiddle 演示中看到它的实际效果。

顺便说一句,您提供的键和值数组的左括号和右括号不匹配,所以我必须修复它们。

于 2012-12-12T02:11:59.333 回答
1

小提琴

function pairUpItem(keys, values) {
    var len = keys.length;
    var result = {};
    for (var i = 0; i < len; i++) {
        var key = keys[i];
        var value = values[i];
        if (typeof(key) == "string") {
            result[key] = value;
        } else {
            for (var key2 in key) {
                if (key.hasOwnProperty(key2)) {
                    result[key2] = pairUpItems(key[key2], value);
                }
            }
        }
    }
    return result;
}

function pairUpItems(keys, values) {
    var len = values.length;
    var result = [];
    for (var i = 0; i < len; i++) {
        var value = values[i];
        if (typeof(value) !== "undefined") {
            result.push(pairUpItem(keys, value));
        }
    }
    return result;
}

var keys   = ["Age", "Name", "Photos", { "Friends": ["FirstName", "LastName"] }];
var values = [ [31, "Bob", ["1.jpg", "2.jpg"], [ ["Bob", "Hope"], ["Foo", "Bar"] ] ], [21, "Jane", ["4.jpg", "5.jpg"], [ ["Mr", "T"],["Foo", "Bar"] ] ] ];

var result = pairUpItems(keys, values);
​console.dir(result);​
于 2012-12-12T02:21:57.830 回答