ইন 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.
আমি বিশ্বাস করি যে শব্দাবলীর দৃষ্টিকোণ থেকে সেগুলি সম্পর্কে ভাবতে শেখা আপনাকে বিদ্যমান এবং অ-বিদ্যমান মানের সমস্ত ভিন্ন পরিস্থিতিতে কী আচরণ করবে তা ভালভাবে "অনুমান" করতে দেয়।