如前所述,Array
S和Object
s为不同的。我并没有真正遵循你从一个结构转换到另一个结构的理由,你应该考虑以不同的方式工作,这完全可以从你的问题和评论描述中得到。但是,如果您确实必须进行转换,那么您需要执行某种映射,以确保事物顺序正确。你可以做这样的事情。
的Javascript
function toMapped (array) {
var mapping = {
"Nome": 0,
"Departamento": 1,
"Cargo": 2
},
mapped = [],
length = array.length,
i = 0,
element,
j;
while (i < length) {
element = [];
for (j in mapping) {
if (mapping.hasOwnProperty(j) && array[i].hasOwnProperty(j)) {
element[mapping[j]] = array[i][j];
}
}
mapped.push(element);
i += 1;
}
return mapped;
}
function fromMapped (array) {
var mapping = {
0: "Nome",
1: "Departamento",
2: "Cargo"
},
mapped = [],
length = array.length,
i = 0,
object,
j;
while (i < length) {
object = {};
for (j in mapping) {
if (mapping.hasOwnProperty(j) && array[i].hasOwnProperty(j)) {
object[mapping[j]] = array[i][j];
}
}
mapped.push(object);
i += 1;
}
return mapped;
}
var test = [{
"Nome": "1",
"Departamento": "1",
"Cargo": "1"
}, {
"Nome": "5",
"Departamento": "5",
"Cargo": "5"
}, {
"Nome": "2",
"Departamento": "2",
"Cargo": "2"
}, {
"Nome": "3",
"Departamento": "33",
"Cargo": "33"
}, {
"Nome": "4",
"Departamento": "4",
"Cargo": "4"
}];
var mapped = toMapped(test);
var unmapped = fromMapped(mapped);
console.log(test);
console.log(mapped);
console.log(unmapped);
在jsfiddle
使用ECMA5 Array.prototype.map
的Javascript
function toMapped(array) {
var mapping = {
"Nome": 0,
"Departamento": 1,
"Cargo": 2
};
return array.map(function (object) {
var element = [],
i;
for (i in mapping) {
if (mapping.hasOwnProperty(i) && object.hasOwnProperty(i)) {
element[mapping[i]] = object[i];
}
}
return element;
});
}
function fromMapped(array) {
var mapping = {
0: "Nome",
1: "Departamento",
2: "Cargo"
};
return array.map(function (element) {
var object = {},
i;
for (i in mapping) {
if (mapping.hasOwnProperty(i) && element.hasOwnProperty(i)) {
object[mapping[i]] = element[i];
}
}
return object;
});
}
var test = [{
"Nome": "1",
"Departamento": "1",
"Cargo": "1"
}, {
"Nome": "5",
"Departamento": "5",
"Cargo": "5"
}, {
"Nome": "2",
"Departamento": "2",
"Cargo": "2"
}, {
"Nome": "3",
"Departamento": "33",
"Cargo": "33"
}, {
"Nome": "4",
"Departamento": "4",
"Cargo": "4"
}];
var mapped = toMapped(test);
var unmapped = fromMapped(mapped);
console.log(test);
console.log(mapped);
console.log(unmapped);
在jsfiddle
你不能像使用数组索引那样访问一个对象的属性(这就是你所要做的)。如果你需要使用索引来访问这些值,我建议将这些对象转换为数组。 –
我该如何做这个转换?我可以将数组转换为矩阵然后返回到一个对象数组吗? –
@惠灵顿:你需要什么矩阵?属性名称应该发生什么(它们不包含在矩阵中,因此转换回来很复杂)?您希望项目的值为什么顺序,目前对象是无序的? – Bergi