Как я могу получить ключ от вложенного объекта = используется для ... в?

1

Вот мой код. Как я могу получить key от key-value пары, используя for цикла?

var apartment = {
  bedroom: {
    area: 20,
    bed: {
      type: 'twin-bed',
      price: 100
    }
  }
};

Требуемый выход выглядит следующим образом:

/* desired results :
 * bedroom
 * area
 * bed
 * type
 * price
*/

Пожалуйста помоги

Теги:
object

5 ответов

0
Лучший ответ

Вы можете использовать рекурсивную функцию:

function getKeys(source, dest) {
    for (let key in source) {
        if (typeof source[key] == 'object') {
            dest.push(key)
            getKeys(source[key], dest)
        } else { 
            dest.push(key)
        }
    } 
    return dest 
}

result = []
const apartment = {
  bedroom: {
    area: 20,
    bed: {
      type: 'twin-bed',
      price: 100
    }
  }
}
getKeys(apartment, result) // ["bedroom", "area", "bed", "type", "price"]
1
var inputs = [
  {a:1,b:2,c:3}, // Simple object
  {a:{b:2,c:3}}, // Simple object with nesting
  {a:{a:{b:2,c:3}}}, // Repeated key hiding nesting
  {a:[{b:2,c:3}]}, // keys behind array
];
inputs.push(inputs); // reference cycle and array at top

function getKeys(obj) {
  var all = {};
  var seen = [];
  checkValue(obj);
  return Object.keys(all);

  function checkValue(value) {
    if (Array.isArray(value)) return checkArray(value);
    if (value instanceof Object) return checkObject(value);
  }

  function checkArray(array) {
    if (seen.indexOf(array) >= 0) return;
    seen.push(array);
    for (var i = 0, l = array.length; i < l; i++) {
      checkValue(array[i]);
    }
 }

  function checkObject(obj) {
    if (seen.indexOf(obj) >= 0) return;
    seen.push(obj);
    var keys = Object.keys(obj);
    for (var i = 0, l = keys.length; i < l; i++) {
      var key = keys[i];
      all[key] = true;
      checkValue(obj[key]);
    }
  }
}

var result = inputs.map(getKeys);

console.log(result);
  • 0
    ТКС за помощь мне :)
  • 0
    пожалуйста, проголосуйте и выберите ответ
0

мы можем легко сделать с помощью regex, преобразовать строку объекта и применить регулярное выражение для извлечения конкретного слова

запустить фрагмент для требуемого вывода

var apartment = {
  bedroom: {
    area: 20,
    bed: {
      type: 'twin-bed',
      price: 100
    }
  }
};

apartment = JSON.stringify(apartment);

var re = /(")\w+(")(:)/g;
var match;
do {
    match = re.exec(apartment);
    if (match) {
        console.log(match[0]);
    }
} while (match);

regex:/(")\w+ (") (:)/g

только извлекает ключ для большего количества щелчков здесь

do while отвечает за обнаружение множественного совпадения в строке

0
var getKeys = function(obj) {
  var keys = [];
  Object.keys(obj).forEach(function(key){
    keys.push(key);
    if(typeof obj[key] == 'object'){
      keys = keys.concat(getKeys(obj[key]));
    }
  })
  return keys;
}

затем

var keys = getKeys(apartment);
  • 0
    О, мой бог !!! большое спасибо братан
  • 0
    Но как я могу использовать для ..... в?
Показать ещё 1 комментарий
0

Вы можете использовать простой Regex следующим образом:

var apartment = {
  bedroom: {
    area: 20,
    bed: {
      type: 'twin-bed',
      price: 100
    }
  }
};
 let result = [];
 let jsonstr = JSON.stringify(apartment);
 // {"bedroom":{"area":20,"bed":{"type":"twin-bed","price":100}}}
 let regex = /"(\w+)":/g;
 jsonstr.replace(regex, function(match,prop){
   result.push(prop);
 });
 console.log(result);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню