映射数组到对象的深度基于单独的对象
Map array to object with depth based on separate object
我有一个数组的数据(实际上是一个解析CSV转储从MySQL与头)
['adam', 'smith', 'honda', 'civic']
我有一个对象,它定义了数据数组作为对象的样子。
{
first_name : 0,
last_name: 1,
car : {
make: 2,
model: 3
}
}
该对象可以有任意深度的嵌套值。它也是动态生成的。
我的问题是:我如何将值从数组转换到对象?
(我正试图使一个递归函数在对象上循环,并抓住当前的数组,但一直跑到墙上。如果我让它工作,我会发布它,但我怀疑有一个更简单的方法来完成这一点。
这是一种方法。它适用于您所展示的情况。
小提琴:http://jsfiddle.net/wy0doL5d/8/
var arr = ['adam', 'smith', 'honda', 'civic']
var obj = {
first_name : 0,
last_name: 1,
car : {
make: 2,
model: 3
}
}
function mapObj(o, a)
{
Object.keys(o).forEach(function(key){
var objType = typeof(o[key]);
if(objType === "object")
{
mapObj(o[key], a);
}
else
{
o[key] = a[o[key]];
}
});
}
mapObj(obj, arr);
你可以尝试这样做:
var myarray = ['adam', 'smith', 'honda', 'civic'];
var myobject = {
first_name: 0,
last_name: 1,
car: {
make: 2,
model: 3
}
};
function objectLoop(obj) {
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
if (typeof obj[key] == 'number') {
obj[key] = myarray[obj[key]];
} else {
objectLoop(obj[key]);
}
}
}
return obj;
}
console.log(objectLoop(myobject));
写得很快。可能有一些用例我没有考虑到,但它确实适用于你的数据。
小提琴:http://jsfiddle.net/qyga4p58/
一个可能的解决方案!
var arr =['adam', 'smith', 'honda', 'civic'];
var obj = {
first_name : 0,
last_name: 1,
car : {
make: 2,
model: 3
}
}
function isNumber(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
function extract( argObj , argArr){
var o = {};
Object.keys( argObj ).forEach(function( k ){
var curDef = argObj[k];
if(isNumber( curDef ) ){
o[k] = argArr[ curDef ];
return;
}
o[k] = extract( curDef , argArr);
})
return o;
}
var newO = extract(obj, arr);
console.dir( newO );
document.body.innerHTML+= '<pre>' + JSON.stringify(newO , null , ' ') + '</pre>';
相关文章:
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 将单独的数组深层键转换为所需的类型(数组或对象)
- 如何使jQuery中的悬停函数单独应用于数据库映像
- 访问对象的最简单方法'的单独财产
- 查找数组's按属性不存在于另一个数组中的对象
- 块相对于父对象的位置
- 使用Lodash从JSON对象获取特定于环境的配置
- 在 Node.JS 中,如何从单独的.js文件中返回整个对象
- 在对象上迭代以验证它是否's键存在于数组中
- 将另一个文件中的对象添加到单独文件中的阵列中
- 页面对象设计:有没有相当于Ruby gem的Javascript;site_prism”;
- 有可能对对象中的所有键进行原子更新吗?类似于阵列拼接的东西
- 为什么属性存在于对象实例上,即使其原型发生了更改
- undercore返回数组中对象的indes,其中单词存在于对象中的句子中
- HTML按钮的作用类似于从键盘按下的键,并在某些对象或整个网站上起作用
- 获取动态背景颜色,使用 LESS 应用于单独的元素
- 如何推送到实际对象的数组最后状态,清除它并像新对象一样单独编辑
- 在没有jQuery的Javascript中,我要查找一个数组中的任何值是否存在于单独的数组中
- Knockout计算的可观察对象的单独绑定不刷新
- Regex只用于单独的空白,而不是字符之间的空白