我有一个对象,我必须分成两个数组来正确处理。 它看起来像这样:
{
city:"stuttgart",
street:"randomstreet",
...
}
由于它需要符合某个指令,我必须将其转换为:
[
{key:"city", value:"stuttgart"}
{key:"street", value:"randomstreet"},
...
]
为此我首先使用
var mapFromObjectWithIndex = function (array) {
return $.map(array, function(value, index) {
return [value];
});
};
var mapFromObjectWithValue = function (array) {
return $.map(array, function(value, index) {
return [index];
});
});
创建两个数组,一个包含旧键,另一个包含旧值。然后我创建了另一个二维数组,将它们映射到一个执行此
的数组中var mapToArray = function (arrayValue, arrayIndex) {
var tableData = [];
for (var i = 0; i<arrayIndex.length; i++){
tableData[i] = {key:arrayIndex[i] , value:arrayValue[i]};
}
return tableData;
};
(也许我已经搞砸了,这可以更容易吗?)
现在,我使用数组(tableData)来显示表单中的数据。可以编辑值字段。最后,我想将数组(tableData)转换为原始数组。 (见第一个对象)
请注意,原始对象不仅包含字符串作为值,但也可以包含对象。
答案 0 :(得分:8)
我认为转换肯定更容易:
var obj = {
city:"stuttgart",
street:"randomstreet",
};
var tableData = Object.keys(obj).map(k => {return {key: k, value: obj[k]}});
console.log(tableData);
var dataBack = {};
tableData.forEach(o => dataBack[o.key] = o.value);
console.log(dataBack);
&#13;
你想用对象做什么?你想扩展它们吗?如果是,你可以做这样的事情(它也适用于嵌套对象):
var obj = {
city:"stuttgart",
street:"randomstreet",
obj: {a: 'a', b: 'b'},
subObject: {aha: {z: 'z', y: 'y'}}
};
function trasformToTableData(obj) {
if (typeof obj !== 'object') return obj;
return Object.keys(obj).map(k => {return {key: k, value: trasformToTableData(obj[k])}});
}
var tableData = trasformToTableData(obj);
console.log(tableData);
function transformBack(obj) {
if (Array.isArray(obj)) {
var support ={};
for (let i = 0; i < obj.length; i++) {
support[obj[i].key] = transformBack(obj[i].value)
}
return support;
}
return obj;
}
var dataBack = {};
tableData.forEach(o => dataBack[o.key] = transformBack(o.value));
console.log(dataBack);
&#13;
答案 1 :(得分:3)
让我们玩得开心,将我们的对象变成可迭代的,按照以下方式完成工作;
var input = {city:"stuttgart", street:"randomstreet", number: "42"};
output = [];
input[Symbol.iterator] = function*(){
var ok = Object.keys(this),
i = 0;
while (i < ok.length) yield {key : ok[i], value: this[ok[i++]]};
};
output = [...input];
console.log(output);
答案 2 :(得分:2)
当您使用objVar.mapToArray()
和Object.keys()
.map()
时,此功能会将您的对象映射到数组
Object.prototype.mapToArray = function() {
return Object.keys(this).map(function(v) {
return { key: v, value: this[v] };
}.bind(this));
}
答案 3 :(得分:1)
我会做这样的事情:
var dataObj = {
city:"stuttgart",
street:"randomstreet",
};
function toKeyValue(obj) {
var arr = [];
for (var key in obj) {
if(obj.hasOwnProperty(key)) {
arr.push({'key': key, 'value': obj[key]});
}
}
return arr;
}
var arrayKeyValue = toKeyValue(dataObj);
console.log(arrayKeyValue);
&#13;