আমি ভাবছি কোনও জাভাস্ক্রিপ্ট সংগ্রহে কোনও আইটেম প্রতিস্থাপনের জন্য লোডাশের কোনও সহজ পদ্ধতি আছে কিনা? (সম্ভাব্য সদৃশ কিন্তু আমি উত্তরটি বুঝতে পারি নি :)
আমি তাদের ডকুমেন্টেশনের দিকে তাকিয়েছিলাম কিন্তু কিছুই পাইনি
আমার কোডটি হ'ল:
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);
});
আপডেট: আমি যে বস্তুর সাথে প্রতিস্থাপনের চেষ্টা করছি তার অনেকগুলি বৈশিষ্ট্য রয়েছে
{আইডি: 1, প্রোপ 1: ..., প্রোপ 2: ..., এবং আরও}
সমাধান:
ডিএফএসকিউর জন্য ধন্যবাদ তবে লড্যাশের মধ্যে আমি একটি সঠিক সমাধান খুঁজে পেয়েছি যা ভাল কাজ করে বলে মনে হচ্ছে এবং বেশ ঝরঝরে এবং আমি অনেক জায়গায় এই প্রয়োজনীয়তার কারণে এটি একটি মিশ্রণে রেখেছি। 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));
দ্রুত সমাধান যেমন @ ডিএফএসকিউ দ্বারা চিহ্নিত করা হয়েছে, নিম্নলিখিতটি দ্রুততর উপায়
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এবং _.indexOf। আপনার প্রয়োজনীয় সমস্ত 1 হয়ে গেলে আপনি 3 বার অ্যারে দিয়ে পুনরাবৃত্তি করছেন