2016-11-01 5 views
0

В качестве упражнения я пытаюсь научиться печатать ключ и значение объекта JS. Мне тяжело.Невозможно выполнить итерацию через объект JavaScript

Ниже приведен базовый объект, который я написал и хочу просто распечатать key : value

var obTest = { 
    name: "John", 
    WeddingDate: "10/18/2008", 
    NumberKids: "2", 
    Website: "www.samplewebsite.com 
}; 


/* VERSION 1 
for (var key in obTest) { 
    // skip loop if the property is from prototype 
    if (!obTest.hasOwnProperty(key)) continue; 

    var obKey = obTest[key]; 
    for (var obProp in obKey) { 
     // skip loop if the obProperty is from prototype 
     if(!obKey.hasOwnProperty(obProp)) continue; 

     // your code 
     alert(obProp + " : " + obKey[obProp]); 
    } 
}; 
    // note: this prints each character as a key:value 
*/ 

/* VERSION 2 
for (var key in obTest) { 
    if (obTest.hasOwnProperty(key)) { 
     var obKey = obTest[key]; 
     for (var prop in obKey) { 
     if (obKey.hasOwnProperty(prop)) { 
      console.log(prop + " : " + obKey[prop]); 
     } 
     } 
    } 
}; 
    // note: this prints each character as a key:value 
*/ 


// VERSION 3 
Object.keys(obTest.forEach(function(key) { 
    console.log(key, obTest[key]); 
})); 
    // note: this gives me a breakpoint and can't figure out why it does not work 

Как отмечалось выше, версия 1 и версия 2 печать такой же результат следующим образом:

0 : J 
1 : o 
2 : h 
3 : n 
0 : 1 
1 : 0 
2 :/
3 : 1 
4 : 8 
5 :/
6 : 2 
7 : 0 
8 : 0 
9 : 8 
0 : 2 
0 : w 
1 : w 
2 : w 
3 : . 
4 : s 
5 : a 
6 : m 
7 : p 
8 : l 
9 : e 
10 : w 
11 : e 
12 : b 
13 : s 
14 : i 
15 : t 
16 : e 
17 : . 
18 : c 
19 : o 
20 : m 

I получить точку останова с помощью кода Visual Studio для версии 3.

Пожалуйста, помогите мне сделать вывод следующим образом:

name : John 
    WeddingDate : 10/18/2008 
    NumberKids : 2 
    Website : www.samplewebsite.com 

Я не хочу иметь числовые ключи, особенно те, которые повторяются. Другие статьи, которые я прочитал, похоже, не имеют никакого смысла. Python кажется довольно простым в отношении итерации и печати ключей объектов и значений.

Спасибо!

ответ

3

Вы используете два вложенных цикла, когда один будет достаточно:

for (var key in obTest) { 
    // skip loop if the property is from prototype 
    if (!obTest.hasOwnProperty(key)) continue; 
    //find the object corresponding to the current key 
    var obKey = obTest[key]; 
    //output the key and the corresponding object 
    alert(key + " : " + obKey); 
}; 

С вашей второй цикл, вы перечислить все пары «клавиши: значения» внутри каждого значения объекта. Для строки «Джон» значения пар: значения (0: «J», 1: «o», 2: «h», 3: «n»)

Для версии 3 вы получили скобки:

Object.keys(obTest) //close parenthesis of keys here 
     .forEach(function(key) { 
     console.log(key, obTest[key]); 
     }); //close only forEach here 
+0

спасибо за нарушение, что вниз для меня –

1

Третья попытка многообещающая, но неправильно реализована. Для того, чтобы получить желаемый результат, вы можете использовать

function objectString(obj) { 
    var keys = Object.keys(obj); 
    return keys.map(v => v + ": " + obj[v]).join("\n"); 
} 

console.log(objectString(obTest)); 
0

Object.keys(your_object) является вашим другом, он преобразует объект в массив. Ознакомьтесь с документацией here

1

Используйте Object.keys(), чтобы получить список ключей объекта. Затем итерации, чтобы получить их значения.

var obTest = { 
    name: "John", 
    WeddingDate: "10/18/2008", 
    NumberKids: "2", 
    Website: "www.samplewebsite.com" }; 

Object.keys(obTest).forEach(function(key){   
    if (obTest.hasOwnProperty(key)){ 
     console.log(key + ":" + obTest[key]); 
    } 
}); 
+0

делает 'forEach' пропускать объекты, которые имеют свои собственные свойства, такие как' obTest.hasOwnProperty'. Если нет, потому что мне нравится краткость кода, как мне добавить это в это? –

+0

'forEach' - это просто функция для итерации по массиву. –

+1

Я обновил ответ, чтобы печатать только собственное имущество. –

1

Просто используйте пример из MDN Docs

for (var property in obTest) { 
    if(obTest.hasOwnProperty(property)) { 
     console.log(property + ": " + obTest[property]) 
    } 
} 

Одна из проблем состоит в том, что вам не хватает " за стоимости вашего -свойстве «Сайт».

http://codepen.io/anon/pen/ozKENQ

Смежные вопросы