ইন Lodash গ্রন্থাগার, করতে পারেন কেউ একটি ভাল ব্যাখ্যা প্রদান একত্রীকরণ এবং প্রসারিত / বরাদ্দ ।
এটি একটি সাধারণ প্রশ্ন তবে উত্তরটি আমাকে এড়িয়ে চলেন।
ইন Lodash গ্রন্থাগার, করতে পারেন কেউ একটি ভাল ব্যাখ্যা প্রদান একত্রীকরণ এবং প্রসারিত / বরাদ্দ ।
এটি একটি সাধারণ প্রশ্ন তবে উত্তরটি আমাকে এড়িয়ে চলেন।
উত্তর:
কীভাবে extend/ assignকাজ করে তা এখানে : উত্স অনুসারে প্রতিটি সম্পত্তির জন্য, এর মানটিকে গন্তব্যে অনুলিপি করুন। যদি সম্পত্তি মানগুলি নিজেরাই বস্তু হয় তবে তাদের সম্পত্তিগুলির কোনও পুনরাবৃত্ত ট্র্যাভার্সাল নেই। সম্পূর্ণ অবজেক্ট উত্স থেকে নেওয়া হবে এবং গন্তব্য সেট করা হবে।
কীভাবে এটি mergeকাজ করে তা এখানে : উত্স অনুসারে প্রতিটি সম্পত্তির জন্য, সেই সম্পত্তিটি নিজেই আপত্তিজনক কিনা তা পরীক্ষা করে দেখুন। যদি তা হয় তবে পুনরাবৃত্তির সাথে নেমে আসুন এবং উত্স থেকে গন্তব্যে চাইল্ড অবজেক্টের বৈশিষ্ট্য ম্যাপ করার চেষ্টা করুন। সুতরাং মূলত আমরা উত্স থেকে শ্রেণিবিন্যাসকে উত্স থেকে গন্তব্যে মার্জ করি। extend/ এর জন্য থাকাকালীন assignএটি উত্স থেকে গন্তব্যে সম্পত্তিগুলির এক স্তরের অনুলিপি।
এখানে সহজ জেএসবিন যা এই স্ফটিকটিকে পরিষ্কার করবে: http://jsbin.com/uXaqIMa/2/edit?js,console
এখানে আরও বিস্তৃত সংস্করণ যা উদাহরণটিতে অ্যারে অন্তর্ভুক্ত রয়েছে: http://jsbin.com/uXaqIMa/1/edit?js,console
var combined = merge({}, src, dest)
_.merge(object, [sources], [customizer], [thisArg])_.assign(object, [sources], [customizer], [thisArg])_.extend(object, [sources], [customizer], [thisArg])_.defaults(object, [sources])_.defaultsDeep(object, [sources])_.extendএটির জন্য একটি উপনাম _.assign, সুতরাং তারা অভিন্নnullএকই রকম পরিচালনা করে_.defaultsএবং _.defaultsDeepঅন্যদের তুলনায় বিপরীত ক্রমে আর্গুমেন্টগুলি প্রক্রিয়া করে (যদিও প্রথম আর্গুমেন্টটি এখনও লক্ষ্য অবজেক্ট)_.mergeএবং _.defaultsDeepশিশু অবজেক্টগুলিকে একীভূত করবে এবং অন্যরা মূল স্তরে ওভাররাইট করবে_.assignএবং এর _.extendসাথে একটি মান ওভাররাইট করবেundefined_.assign ({}, { a: 'a' }, { a: 'bb' }) // => { a: "bb" }
_.merge ({}, { a: 'a' }, { a: 'bb' }) // => { a: "bb" }
_.defaults ({}, { a: 'a' }, { a: 'bb' }) // => { a: "a" }
_.defaultsDeep({}, { a: 'a' }, { a: 'bb' }) // => { a: "a" }
_.assignপরিচালনা করে undefinedতবে অন্যরা এড়িয়ে যায়_.assign ({}, { a: 'a' }, { a: undefined }) // => { a: undefined }
_.merge ({}, { a: 'a' }, { a: undefined }) // => { a: "a" }
_.defaults ({}, { a: undefined }, { a: 'bb' }) // => { a: "bb" }
_.defaultsDeep({}, { a: undefined }, { a: 'bb' }) // => { a: "bb" }
nullএকই হ্যান্ডেল_.assign ({}, { a: 'a' }, { a: null }) // => { a: null }
_.merge ({}, { a: 'a' }, { a: null }) // => { a: null }
_.defaults ({}, { a: null }, { a: 'bb' }) // => { a: null }
_.defaultsDeep({}, { a: null }, { a: 'bb' }) // => { a: null }
_.mergeএবং _.defaultsDeepচাইল্ড অবজেক্টগুলিকে মার্জ করবে_.assign ({}, {a:{a:'a'}}, {a:{b:'bb'}}) // => { "a": { "b": "bb" }}
_.merge ({}, {a:{a:'a'}}, {a:{b:'bb'}}) // => { "a": { "a": "a", "b": "bb" }}
_.defaults ({}, {a:{a:'a'}}, {a:{b:'bb'}}) // => { "a": { "a": "a" }}
_.defaultsDeep({}, {a:{a:'a'}}, {a:{b:'bb'}}) // => { "a": { "a": "a", "b": "bb" }}
_.assign ({}, {a:['a']}, {a:['bb']}) // => { "a": [ "bb" ] }
_.merge ({}, {a:['a']}, {a:['bb']}) // => { "a": [ "bb" ] }
_.defaults ({}, {a:['a']}, {a:['bb']}) // => { "a": [ "a" ] }
_.defaultsDeep({}, {a:['a']}, {a:['bb']}) // => { "a": [ "a" ] }
a={a:'a'}; _.assign (a, {b:'bb'}); // a => { a: "a", b: "bb" }
a={a:'a'}; _.merge (a, {b:'bb'}); // a => { a: "a", b: "bb" }
a={a:'a'}; _.defaults (a, {b:'bb'}); // a => { a: "a", b: "bb" }
a={a:'a'}; _.defaultsDeep(a, {b:'bb'}); // a => { a: "a", b: "bb" }
দ্রষ্টব্য: @ মিস্টিক হিসাবে উল্লেখ করা হয়েছে যে লোডাশ অ্যারেগুলিকে অ্যারেগুলিতে সূচি হিসাবে চিহ্নিত করা হয় objects
_.assign ([], ['a'], ['bb']) // => [ "bb" ]
_.merge ([], ['a'], ['bb']) // => [ "bb" ]
_.defaults ([], ['a'], ['bb']) // => [ "a" ]
_.defaultsDeep([], ['a'], ['bb']) // => [ "a" ]
_.assign ([], ['a','b'], ['bb']) // => [ "bb", "b" ]
_.merge ([], ['a','b'], ['bb']) // => [ "bb", "b" ]
_.defaults ([], ['a','b'], ['bb']) // => [ "a", "b" ]
_.defaultsDeep([], ['a','b'], ['bb']) // => [ "a", "b" ]
_.extend is an alias for _.assign, so they are identicalসাথে বিরোধগুলিOnly _.assign will overwrite a value with undefined
মনোযোগ দেওয়ার আরেকটি পার্থক্য হ'ল undefinedমানগুলি পরিচালনা করা :
mergeInto = { a: 1}
toMerge = {a : undefined, b:undefined}
lodash.extend({}, mergeInto, toMerge) // => {a: undefined, b:undefined}
lodash.merge({}, mergeInto, toMerge) // => {a: 1, b:undefined}
সুতরাং মানগুলি সংজ্ঞায়িত মানগুলিতে mergeএকীভূত করবে না undefined।
mergeIntoএমন বৈশিষ্ট্য ছিল যা toMergeনা থাকে তবে এটি সেই বৈশিষ্ট্যগুলি ধরে রাখতে পারে। সেক্ষেত্রে এটি কোনও ক্লোন হবে না।
সিনেমিক দৃষ্টিকোণ থেকে তারা কী করে তা বিবেচনা করাও সহায়ক হতে পারে:
will assign the values of the properties of its second parameter and so on,
as properties with the same name of the first parameter. (shallow copy & override)
merge is like assign but does not assign objects but replicates them instead.
(deep copy)
provides default values for missing values.
so will assign only values for keys that do not exist yet in the source.
works like _defaults but like merge will not simply copy objects
and will use recursion instead.
আমি বিশ্বাস করি যে শব্দাবলীর দৃষ্টিকোণ থেকে সেগুলি সম্পর্কে ভাবতে শেখা আপনাকে বিদ্যমান এবং অ-বিদ্যমান মানের সমস্ত ভিন্ন পরিস্থিতিতে কী আচরণ করবে তা ভালভাবে "অনুমান" করতে দেয়।