2016-10-28 2 views
0
var obj = { 
a: [1, 3, 4], 
b: 2, 
c: ['hi', 'there'] 
    } 
    removeArrayValues(obj); 
    console.log(obj); // --> { b: 2 } 

Voici mon code:Comment supprimer les valeurs de tableau d'un objet

function removeArrayValues(obj) { 
for (var key in obj){ 
if (Array.isArray(obj[key])) delete obj[key] 
//return obj[key] -> {b: 2, c: ["hi", "there"]} 
} 
return obj[key] 
} 

Pourquoi faut-il revenir et ne obj["a"]obj["c"] quand je retourne à l'intérieur du for/in loop et non obj["k"]. J'ai compris le problème juste avant que je ne le publie, mais je rencontre beaucoup ce problème avec les tableaux et les objets et je pourrais utiliser une explication de ce qui se passe ici.

+1

On ne sait pas ce que vous n'avez pas compris. Le si retourne "vrai", "faux" et "vrai". –

+1

* "et not obj [" k "]" * - D'où vient le ''k '' dont vous parlez? Si vous avez une déclaration 'return' * à l'intérieur de * la boucle selon la ligne que vous avez commentée, alors elle quitte la fonction immédiatement sans terminer la boucle. Notez que la valeur 'return' de votre fonction sera' undefined', parce que 'obj [key]' est indéfini après que la boucle supprime le dernier élément. – nnnnnn

+0

Ce que je peux voir, c'est que vous avez supprimé avec succès toutes les clés d'objet qui contiennent la valeur de tableau .. Quelle est la question à nouveau? – choz

Répondre

2

Tout d'abord, voyons votre objet. Il dispose de 3 paires clé/valeur:

var obj = { 
    a: [1, 3, 4],//the value here is an array 
    b: 2,//the value here is not an array 
    c: ['hi', 'there']//the value here is an array 
}; 

Pour chaque clé dans cet objet, votre fonction removeArrayValues supprimera l'un d'eux qui a un tableau comme valeur:

if (Array.isArray(obj[key])) 

Cette condition sera de retour « vrai "si la valeur est un tableau. Vous pouvez le vérifier dans cette démo: le console.log intérieur de la boucle for se connectera "true", "false" et "true":

var obj = { 
 
a: [1, 3, 4], 
 
b: 2, 
 
c: ['hi', 'there'] 
 
    } 
 
    removeArrayValues(obj); 
 

 
function removeArrayValues(obj) { 
 
for (var key in obj){ 
 
console.log(Array.isArray(obj[key])) 
 
if (Array.isArray(obj[key])) delete obj[key] 
 
//return obj[key] -> {b: 2, c: ["hi", "there"]} 
 
} 
 
return obj[key] 
 
}

Ainsi, la première clé sera supprimée ("true"), le second ne le sera pas ("false"), et le troisième sera supprimé ("true").