Каков наилучший способ сопоставить объект 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' }

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))

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

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

Другие вопросы по тегам