मुझे आश्चर्य है कि अगर एक जावास्क्रिप्ट संग्रह में एक आइटम को बदलने के लिए लॉश में एक सरल विधि है? (संभव डुप्लिकेट लेकिन मुझे वहां इसका जवाब समझ में नहीं आया :)
मैंने उनके प्रलेखन को देखा, लेकिन कुछ भी नहीं मिला
मेरा कोड है:
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);
});
अद्यतन: मैं जिस वस्तु को बदलने की कोशिश कर रहा हूं, उसमें कई गुण हैं
{आईडी: १, प्रोप १: ..., प्रोप २: ..., इत्यादि
उपाय:
Dfsq के लिए धन्यवाद, लेकिन मुझे लॉश के भीतर एक उचित समाधान मिला जो कि ठीक काम करता है और बहुत साफ-सुथरा है और मैंने इसे एक मिक्सिन में डाल दिया है और साथ ही साथ मुझे कई जगहों पर इसकी आवश्यकता है। 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));
तेज़ समाधान @dfsq द्वारा बताया गया है, निम्नलिखित तेजी से रास्ता है
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
मैच के लिए उपयोग करें ।
_.findIndex
इसके बजाय _.find
आप दूसरे _.find
और a दोनों को छोड़ देंगे _.indexOf
। आप 3 बार सरणी के माध्यम से पुनरावृत्ति कर रहे हैं जब आपको सभी की आवश्यकता होती है 1.