我正在开发使用AngularJS和Lodash的应用程序。我需要执行以下操作的转换函数:
从
{
a: 0,
b: {x: {y: 1, z: 2}},
c: 3
}
到
{
a: 0,
'b.x.y': 1,
'b.x.z': 2,
c: 3
}
现在,我使用的是递归函数通过对象来遍历。暂且,我的代码看起来像(不全):
var obj = {},
keys, property, value;
var recur = function (mat) {
keys = Object.keys(mat);
for (var i = 0; i < keys.length; i++) {
property = keys[i];
value = mat[property];
if (isObj(value)) {
//debugger;
recur(value);
} else {
obj[property] = value;
}
}
}
recur({
a: 0,
b: {x: {y: 1, z: 2}},
c: 3
});
console.log(obj);
function isObj(value) {
return typeof value === "object";
}
一个问题是我收到的同时调试:
我没有被递增;在最高级别的递归调用期间,我仍为0.
任何人都知道为什么? 如果你知道有任何其他方式进行这种转换,请分享它。
亲切的问候。
B:{X:{Y:1},{Z :2}}不是有效的json – marvel308
@ marvel308:根本没有JSON。你说得对,'b:{x:{y:1},{z:2}},'包含一个无效的对象初始值设定项。 –
yup我想'b:{x:{y:1},{z:2}}'应该是'b:{x:[{y:1},{z:2}]} –