Javascript 我怎样才能把这个人名转换成人名?
像这样,我有一个对象:Javascript 我怎样才能把这个人名转换成人名?,javascript,underscore.js,Javascript,Underscore.js,像这样,我有一个对象: { 'person': { 'like': { 'color': 'red', 'food': 'rice' }, 'name': { 'first': { 'word': 'bob', 'num': 4 } }, 'age': { 'next': 18, 'now': 19 } } } 我想把它转换成: {
{
'person': {
'like': {
'color': 'red',
'food': 'rice'
},
'name': {
'first': {
'word': 'bob',
'num': 4
}
},
'age': {
'next': 18,
'now': 19
}
}
}
我想把它转换成:
{
'person.like.color': 'red',
'person.like.food': 'rice',
'name.first.word': 'bob',
'name.first.num':4,
....
}
我怎样才能转换它?
这是三窝,如果我有五窝或更多?我如何才能做到这一点?像您想要的那样的数组是不可能出现的,但您可以通过以下方式获得类似的对象:
var newObj = {};
var temp = {};
for (var a in p) {
if (p.hasOwnProperty(a)) {
temp = p[a];
for (var b in p[a]) {
if (p[a].hasOwnProperty(b)) {
newObj[a + "." + b] = temp[b];
}
}
}
}
检查输出:
此解决方案将嵌套对象展平到任意深度,包含对象或普通值
function flatten_to_dots(o) {
var result = {};
function _flatten(o, prefix) {
Object.keys(o).forEach(function(k) {
var value = o[k];
if (value && typeof value === 'object') _flatten(value, prefix + k + '.');
else result[prefix + k] = value;
});
}
_flatten(o, '');
return result;
}
内部函数“展平”在对象的键上循环。如果对应的值是标量,则只需将其放置在结果中。如果它是一个对象,我们递归地调用\u flant
来处理它的属性,并传递我们希望用于其键的前缀
> flatten_to_dots({'person': {'name': 'cc', 'age': 12 }})
< {person.name: "cc", person.age: 12}
> flatten_to_dots({person: { name: {first: 'Joe', last: 'Blow'}, age: 12}})
< {person.name.first: "Joe", person.name.last: "Blow", person.age: 12}
>将点展平({'person':{'name':'cc','age':12})
<{person.name:“cc”,person.age:12}
>将_展平到_点({人:{姓名:{第一个:'乔',最后一个:'吹'},年龄:12})
<{person.name.first:“乔”,person.name.last:“吹”,person.age:12}
您的数组无效。如果这些答案对您有帮助,请接受其中一个。@Dave Gomez如果我有五个层?首先,您没有要求五个层,其次,您可以轻松地重用该代码来处理任意多的对象。您不必这样做,第一个for循环应该遍历所有人。只要尝试一下,如果他们需要的话,就可以进行修复。