0

我从 API 收到这样的数据

var myObj = {'name':'ahmed','age':37,'tools':{'dev1':"macbook",'dev2':"iphone",'dev3':"tablet"},'gender':'male'};

使键值对注意嵌套对象的最佳方法是什么?

更新 感谢您的回答,如果我不想展平我的对象

var myObj = {'name':'ahmed','age':37,'tools':{'dev1':"macbook",'dev2':"iphone",'dev3':"tablet"},'gender':'male'};


function unQuoteKeys(obj, newObj ={}){
    Object.keys(obj).forEach(key => {
          newObj[key] = obj[key]
    });
    return newObj
}
console.log(unQuoteKeys(myObj));

结果

{ name: 'ahmed',
  age: 37,
  tools: { dev1: 'macbook', dev2: 'iphone', dev3: 'tablet' },
  gender: 'male' }
4

2 回答 2

2

听起来您想将整个对象扁平化为一组键值对。您可以使用一个简单的递归函数来执行此操作,如果它们是简单值,则将键/值添加到返回对象,或者如果值是对象,则递归:

var myObj = {'name':'ahmed','age':37,'tools':{'dev1':"macbook",'dev2':"iphone",'dev3':"tablet"},'gender':'male'};

function flatten(obj, res ={}){
    Object.keys(obj).forEach(key => {
        if (typeof obj[key] === 'object') flatten(obj[key], res)
        else res[key] = obj[key]
    })
    return res
}
console.log(flatten(myObj))

如果您可能在对象中的任何地方都有重复的键,这将需要更多的工作。

于 2018-07-11T20:27:57.217 回答
0

如果你想扁平化你的对象,你也可以使用lodash _flatten()方法。奇迹般有效。

于 2018-07-11T22:05:32.887 回答