как лучше всего сопоставить объект Javascript с ключами в кавычках

Я получил данные от 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' }

person Ahmed Younes    schedule 11.07.2018    source источник
comment
Непонятно, что вы имеете в виду; это объект. Если бы вы написали console.log(myObj.tools.dev1), это вернуло бы macbook...   -  person Heretic Monkey    schedule 11.07.2018
comment
Пожалуйста, если возможно, опубликуйте точную структуру данных, которую отправляет API (в формате JSON). То, что вы опубликовали, является объектом JavaScript.   -  person lealceldeiro    schedule 11.07.2018
comment
вы ищете JSON.parse(myObj) или уже это сделали?   -  person Get Off My Lawn    schedule 11.07.2018
comment
Это не JSON, так как JSON требует двойных кавычек ("), а не одинарных (').   -  person Heretic Monkey    schedule 11.07.2018
comment
Дубликат (?) stackoverflow.com/questions /33036487/   -  person Salman A    schedule 11.07.2018


Ответы (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))

Если есть вероятность, что у вас будут дубликаты ключей в любом месте объекта, это потребует немного больше работы.

person Mark    schedule 11.07.2018

Если вы хотите сгладить свой объект, вы также можете использовать метод lodash _flatten(). Работает как шарм.

person Zain Mohsin    schedule 11.07.2018