JavaScript:将对象映射到不同的结构
我的应用程序从各种源系统接收数据。这些数据性质相同,但结构不同。我需要统一结构并将它们保存到一个公共存储库中 我现在正在做的事情如下:JavaScript:将对象映射到不同的结构,javascript,Javascript,我的应用程序从各种源系统接收数据。这些数据性质相同,但结构不同。我需要统一结构并将它们保存到一个公共存储库中 我现在正在做的事情如下: function setSubFieldValue(obj, field, value) { if(field && obj && value) { var i = field.indexOf('\.'); if( i > 0) { var p = field.
function setSubFieldValue(obj, field, value) {
if(field && obj && value) {
var i = field.indexOf('\.');
if( i > 0) {
var p = field.slice(0, i);
if(!obj[p]) obj[p] = {};
setSubFieldValue(obj[p], field.slice(i+1), value)
} else obj[field] = value;
}
}
function getSubFieldValue(obj, field) {
if(field) {
var i = field.indexOf('\.');
if (i > 0) {
var p = field.slice(0, i);
if(obj[p]) {
var v = field.slice(i+1);
return getSubFieldValue(obj[p], v);
}
} else return obj[field];
}
}
function mapObject (srcObj, fieldMap) {
var obj = {};
Object.keys(fieldMap).forEach(function(k) {
var v = getSubFieldValue(srcObj, k);
if(v) setSubFieldValue(obj, fieldMap[k], v);
});
return obj;
};
定义传入对象和输出对象之间的结构映射。例如,对于源对象,例如:
{id:'123', message:'hi', from:{id:'user1', name:'John'}},
其映射对象如下:
var map = {_id:'id', message:'text', 'from.id':'by.id', 'from.name':'by.name'};
定义功能如下:
function setSubFieldValue(obj, field, value) {
if(field && obj && value) {
var i = field.indexOf('\.');
if( i > 0) {
var p = field.slice(0, i);
if(!obj[p]) obj[p] = {};
setSubFieldValue(obj[p], field.slice(i+1), value)
} else obj[field] = value;
}
}
function getSubFieldValue(obj, field) {
if(field) {
var i = field.indexOf('\.');
if (i > 0) {
var p = field.slice(0, i);
if(obj[p]) {
var v = field.slice(i+1);
return getSubFieldValue(obj[p], v);
}
} else return obj[field];
}
}
function mapObject (srcObj, fieldMap) {
var obj = {};
Object.keys(fieldMap).forEach(function(k) {
var v = getSubFieldValue(srcObj, k);
if(v) setSubFieldValue(obj, fieldMap[k], v);
});
return obj;
};
代码在大多数情况下都会起作用,但也有一些缺点:
{arrayproperty:[{a:1, b:2}, {a:2, b:3}]}
上面的代码不允许我将此arrayproperty映射到目标对象中的其他结构,例如:
{newfield:[{field_a:1, field_b:2}, {field_a:2, field_b:3}]}
或
我想知道是否有人有类似的需求,并且对现有的库有一些想法,以便优雅地执行这样的任务 你能解释一下不支持数组中对象的结构映射吗。可能是样品?格伦迪,谢谢你的评论。现在,我已经在文章中添加了关于点本身的更多详细信息。你能为你的数组示例提供
map
对象吗?这正是我想要解决的问题。我可以想出一些处理数组的概念,但代码会变得相当麻烦。我正在寻找一些现有的、经过良好测试的解决方案。所以,正如我看到的,您使用此函数仅更改字段名,而不更改结构?我是对的?