JavaScript itera por meio de chaves e valores de objeto

Eu só queria manter isso para referência sobre como fazer um loop rápido pelas chaves e valores de um objeto, se necessário. Também incluí uma implementação usando jQuery .each

Observe as limitações de usar um loop for … in, pois ele itera sobre as propriedades de um objeto em uma ordem arbitrária e precisa usar .hasOwnProperty, a menos que as propriedades herdadas queiram ser mostradas.

<b> Mostrar objetos </b>

function showObject(obj) {
var result = "";
for (var p in obj) {
if( obj.hasOwnProperty(p) ) {
result
+= p + " , " + obj[p] + "n";
}
}
return result;
}

<b> Mostrar objetos com .each </b>

function showObjectjQuery(obj) {
var result = "";
$
.each(obj, function(k, v) {
result
+= k + " , " + v + "n";
});
return result;
}

<b> Teste </b>

var test = { 
'type' : 'news',
'name' : 'article1'
};

showObject
(test);
// type , news name , article1
showObjectjQuery
(test);
// type , news name , article1

<b> Um exemplo mais útil chamando uma função nas chaves e valores do objeto </b>

Esta abordagem de loop através de chaves e valores em um objeto pode ser usada para realizar operações mais úteis no objeto, por exemplo, o método pode chamar uma função passada em cada um dos valores. Um exemplo disso é o método foIn em mout.js, que itera por meio das chaves e valores do objeto que chamam a função passada.

function forIn(obj, fn, thisObj){
var key, i = 0;
for (key in obj) {
if (exec(fn, obj, key, thisObj) === false) {
break;
}
}
function exec(fn, obj, key, thisObj){
return fn.call(thisObj, obj[key], key, obj);
}
return forIn;
});

<b> Exemplo de uso de forIn </b>

function Foo(){
this.foo = 1;
this.bar = 2;
}
var obj = new Foo();
var result = 0;
var keys = [];

forIn
(obj, function(val, key, o){
result
+= val;
keys
.push(key);
});
console
.log(result); // 3
console
.log(keys); // ['foo', 'bar']

Respostas relacionadas:

javascript foreach