这让我头疼,如果这里有任何慷慨的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)我正在研究here
目前我能够(几乎)解决这个问题(但不是更深入......):
var keys = ["Age", "Name", "Photos" ];
var values = [ [31, "Bob", ["1.jpg", "2.jpg"]], [21, "Jane", ["4.jpg", "5.jpg"]] ];
感谢您的任何反馈或帮助!
答案 0 :(得分: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;
};
它不处理格式错误的输入,因此您可能希望根据计划使用它来检查。
您可以在this online jsFiddle demo上看到它。
顺便说一下,你给出的键值和值值数组的开始和结束括号都不匹配,所以我不得不修复它们。
答案 1 :(得分: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);