Bir JavaScript koleksiyonundaki bir öğeyi değiştirmek için Lodash'ta daha basit bir yöntem olup olmadığını merak ediyorum. (Olası kopya ama oradaki cevabı anlamadım :)
Belgelerine baktım ama hiçbir şey bulamadım
Benim kodum:
var arr = [{id: 1, name: "Person 1"}, {id:2, name:"Person 2"}];
// Can following code be reduced to something like _.XX(arr, {id:1}, {id:1, name: "New Name"});
_.each(arr, function(a, idx){
if(a.id === 1){
arr[idx] = {id:1, name: "Person New Name"};
return false;
}
});
_.each(arr, function(a){
document.write(a.name);
});
Güncelleme: Değiştirmeye çalıştığım nesnenin birçok özelliği var.
{id: 1, Özellik1: ..., Özellik2: ... ve benzeri}
Çözüm:
Dfsq sayesinde, ancak lodash içinde gayet iyi çalışan ve oldukça düzgün görünen uygun bir çözüm buldum ve birçok yerde bu gereksinime sahip olduğum için onu da bir mixin'e koydum. JSBin
var update = function(arr, key, newval) {
var match = _.find(arr, key);
if(match)
_.merge(match, newval);
else
arr.push(newval);
};
_.mixin({ '$update': update });
var arr = [{id: 1, name: "Person 1"}, {id:2, name:"Person 2"}];
_.$update(arr, {id:1}, {id:1, name: "New Val"});
document.write(JSON.stringify(arr));
Daha Hızlı Çözüm @dfsq tarafından belirtildiği gibi, takip etmek çok daha hızlı
var upsert = function (arr, key, newval) {
var match = _.find(arr, key);
if(match){
var index = _.indexOf(arr, _.find(arr, key));
arr.splice(index, 1, newval);
} else {
arr.push(newval);
}
};
_.findIndex
eşleştirme için kullanın .
_.findIndex
yerine kullanmak _.find
hem saniyeyi _.find
hem de _.indexOf
. Tek ihtiyacınız olan 1 iken diziyi 3 kez