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循环应该遍历所有人。只要尝试一下,如果他们需要的话,就可以进行修复。