2016-06-01 10 views
0

Ich habe versucht, herauszufinden, wie man einfach suchen und einen Wert ersetzen (in diesem Fall einen Wert gleich Null mit undefiniert) in einem Array von Objekten wie folgt - die Array-Schlüssel könnten variieren:So suchen und ersetzen Wert in Array von Objektliteralen

var array = [{ 
    "name": "mike", 
    "age": null 
}, 
{ "name": "jim", 
    "age": 99 
}]; 

Erwartetes Ergebnis:

var array = [{ 
    "name": mike, 
    "age": undefined 
    }, 
    { "name": jim, 
    "age": 99 
    }]; 

Mein Eindruck ist, dass ich in der Lage sollte diese mit der Karte() Funktion, aber keiner der Dokumentation Beispiele zu tun recht Sinn machen zu mir dafür. Ich habe versucht, die Lösung von dieser Frage anzuwenden: https://stackoverflow.com/a/5915891/2930969, aber ohne Erfolg.

Anyways, wenn jemand zu helfen, sich interessiert mich hier in die richtige Richtung ist ein aus eingerahmt codepen Sie mit basteln: http://codepen.io/anon/pen/zBxwdj?editors=0012

+1

Was ist Ihr erwartetes Ergebnis ..? –

+0

Würde helfen, gültige json zu haben, 'mike' und' jim' sind undefiniert. – Ultimater

+0

@PranavCBalan aktualisiert –

Antwort

1

var array = [{ 
 
    "name": "mike", 
 
    "age": null 
 
}, 
 
{ "name": "jim", 
 
    "age": 99 
 
}]; 
 

 
array = array.map(function(item) { 
 
    if(item.age === null) { 
 
    // delete item.age; 
 
    item.age = undefined; 
 
    } 
 
    
 
    return item; 
 
}); 
 

 
console.log(array);

+0

Das ist sehr nah an dem, was ich denke. Ich war in der Lage, das Ergebnis, das ich suchte zu bekommen, indem Sie "item.name === Mike" zu "item.age === null" - wenn Sie das wechseln, ich werde es als richtig markieren –

1

Verwenden forEch() Methode

var array = [{ 
 
    "name": "mike", 
 
    "age": null 
 
}, { 
 
    "name": "jim", 
 
    "age": 99 
 
}]; 
 

 
array.forEach(function(v) { 
 
    v.age === null && (v.age = undefined) 
 
    //or 
 
    // if(v.age === null) v.age = undefined 
 
}) 
 

 
console.log(array);
iterieren und aktualisieren

0

versuchen Sie es,

aktualisiert nur Wertänderung in dem Namen NULL 'Mike' und das Alter ist.

hinweis: es ist gut überprüfen Existenz der Eigenschaft in Objekt vor der Verwendung.

var array = [{ 
 
     "name": "mike", 
 
     "age": null 
 
    }, 
 
    { "name": "jim", 
 
     "age": 99 
 
    }]; 
 

 
var arr = []; 
 

 
arr = array.map(function(x) { 
 
       if(x.hasOwnProperty("age") && x.hasOwnProperty("name") && x["age"] == null && x["name"] == "mike") 
 
          x["age"] = undefined; 
 
    return x; 
 
          }); 
 

 
console.log(arr);

+0

Scheint, alle zu ersetzen "age" mit dem Wert undefined, auch wenn es nicht als null –

+0

aus OP-Frage gestartet wurde: In diesem Fall ersetzt Null durch undefined –

+0

Sorry, war vielleicht unklar, wollte nicht alle 'Alter' Werte undefiniert, nur die, die ursprünglich null waren –

0

Filter Sie Ihre Array einige einzigartige/Scheidungs ​​Eigenschaft verwenden und dann direkt das Objekt aktualisieren (Name in diesem Fall ids sind hier hilfreich?):

var mike = array.filter(function(obj) { return obj.name === 'mike' })[0]; 
mike.age = undefined; 
0

Und die Weg reduzieren.

var arr = [{ 
 
    "name": "mike", 
 
    "age": null 
 
}, 
 
{ "name": "jim", 
 
    "age": 99 
 
}], 
 
    fixed = arr.reduce((p,c) => (c.age === null && (c.age = void 0), p.concat(c)),[]); 
 
console.log(fixed);

1

Da sagten Sie, dass die Schlüssel variieren können, müssen Sie zwei Schleifen tun beliebigen Schlüsselnamen zu decken. Eins über das Array und dann eins über die Tasten jedes Objekts.

var nullToUndef = function (a) { 
    return a.map(function (o) { 
    Object.keys(o).forEach(function (key) { 
     if (o[key] === null) { 
     o[key] = undefined; 
     } 
     }); 
     return o; 
    }); 
    }, 
    array = [ 
    { 
     "name": "mike", 
     "age": null 
    }, 
    { "name": "jim", 
     "age": 99 
    }, 
    {"foo": null, 
    "bar": null 
    } 
    ]; 

console.log(nullToUndef(array)); 

jsFiddle

nullToUndef verwendet Array.prototype.map ein neues Array zu erstellen, innerhalb der Funktionszuordnung es Object.keys verwendet für jedes Objekt eine Liste der wichtigsten Namen zu bekommen. Es überprüft dann jeden Eigenschaftswert, um zu sehen, ob es null ist, und ändert null Eigenschaften zu undefined, bevor das Objekt für das neue Array zurückgegeben wird.