दिलचस्प पोस्ट
Node.js – यूटीसी में डेट स्ट्रिंग फ़ॉर्मेट कैसे करें रेल 4: मैं सास मैपिंग का उपयोग कैसे करूं? शुरुआती के लिए गिट: निश्चित व्यावहारिक गाइड क्या स्प्रिंग @ ट्रान्सैसिअल विशेषता एक निजी विधि पर काम करती है? जावा मेमोरी लीक को कैसे ढूंढें डेटा फ्रेम के सेल से मान कैसे प्राप्त करें? स्ट्रिंग से लाइन ब्रेक (कोई वर्ण नहीं!) को कैसे निकालना है? एक्स घंटे से पुराने फ़ाइलों को कैसे हटाएं कैसे asp.net में लगातार कुकीज़ बनाने के लिए? सर्वर का नाम संकेत कैसे कार्यान्वित करें (एसएनआई) UIImagePickerController एप्लिकेशन को क्रैश करता है | स्विफ्ट 3, एक्सकोड 8 घुमाओ समर्थन विंडोज 7 शैली फ़ाइल choosers? चेकबॉक्स संरेखित कैसे करें और उनके लेबल लगातार क्रॉस-ब्राउज़र होते हैं न्यूनतम एपीआई स्तर 14 के साथ ऐप में रोबो फ़ॉन्ट का उपयोग करें फ्लेक्स कंटेनर को कैसे केन्द्रित करें, लेकिन बाएं-संरेखित फ्लेक्स आइटम

ऑब्जेक्ट्स के 2 एरेज़ मर्ज करें

चलिए एक उदाहरण देखें।

var arr1 = new Array({name: "lang", value: "English"}, {name: "age", value: "18"}); var arr2 = new Array({name : "childs", value: '5'}, {name: "lang", value: "German"}); 

मुझे ऑब्जेक्ट के इस 2 एरे को मर्ज करने और निम्न सरणी बनाने की आवश्यकता है।

 arr3 = new Array({name: "lang", value: "German"}, {name: "age", value: "18"}, {name : "childs", value: '5'}); 

ऐसा करने के लिए कोई जेस्क्रिप्ट या jQuery फ़ंक्शन है?

$ .एंडेंड मेरे लिए उपयुक्त नहीं है यह रिटर्न

 arr4 = new Array({name : "childs", value: '5'}, {name: "lang", value: "German"}); 

अग्रिम धन्यवाद, अलेक्जेंडर

Solutions Collecting From Web of "ऑब्जेक्ट्स के 2 एरेज़ मर्ज करें"

यदि आप जावास्क्रिप्ट में ऑब्जेक्ट के 2 एरे मर्ज करना चाहते हैं आप इस एक लाइन चाल का उपयोग कर सकते हैं

Array.prototype.push.apply(arr1,arr2);

उदाहरण के लिए

 var arr1 = [{name: "lang", value: "English"},{name: "age", value: "18"}]; var arr2 = [{name : "childs", value: '5'}, {name: "lang", value: "German"}]; Array.prototype.push.apply(arr1,arr2); console.log(arr1); // final merged result will be in arr1 

आउटपुट:

 [{"name":"lang","value":"English"}, {"name":"age","value":"18"}, {"name":"childs","value":"5"}, {"name":"lang","value":"German"}] 
 var arr3 = []; for(var i in arr1){ var shared = false; for (var j in arr2) if (arr2[j].name == arr1[i].name) { shared = true; break; } if(!shared) arr3.push(arr1[i]) } arr3 = arr3.concat(arr2); 

यहां छवि विवरण दर्ज करें

मैं हमेशा Google से यहां आती हूं और हमेशा उत्तर से संतुष्ट नहीं हूं आप का उत्तर अच्छा है लेकिन यह underscore.js का उपयोग करना आसान और निगेटिव हो जाएगा

डेमो: http://jsfiddle.net/guya/eAWKR/

यहां एक अधिक सामान्य कार्य है, जो अपनी ऑब्जेक्ट की प्रॉपर्टी का उपयोग करके 2 एरे को मर्ज करेगा। इस मामले में संपत्ति 'नाम' है

 var arr1 = [{name: "lang", value: "English"}, {name: "age", value: "18"}]; var arr2 = [{name : "childs", value: '5'}, {name: "lang", value: "German"}]; function mergeByProperty(arr1, arr2, prop) { _.each(arr2, function(arr2obj) { var arr1obj = _.find(arr1, function(arr1obj) { return arr1obj[prop] === arr2obj[prop]; }); arr1obj ? _.extend(arr1obj, arr2obj) : arr1.push(arr2obj); }); } mergeByProperty(arr1, arr2, 'name'); console.log(arr1); 

[{नाम: "लैंग", मान: "जर्मन"}, {नाम: "उम्र", मूल्य: "18"}, {नाम: "बाल", मूल्य: '5'}]

दो सरणियों को विलय:

 var arr1 = new Array({name: "lang", value: "English"}, {name: "age", value: "18"}); var arr2 = new Array({name : "childs", value: '5'}, {name: "lang", value: "German"}); var result=arr1.concat(arr2); // result: [{name: "lang", value: "English"}, {name: "age", value: "18"}, {name : "childs", value: '5'}, {name: "lang", value: "German"}] 

'नाम' के लिए डुप्लिकेट किए गए मानों के बिना दो सरणियों को मर्ज करना:

 var arr1 = new Array({name: "lang", value: "English"}, {name: "age", value: "18"}); var arr2 = new Array({name : "childs", value: '5'}, {name: "lang", value: "German"}); var i,p,obj={},result=[]; for(i=0;i<arr1.length;i++)obj[arr1[i].name]=arr1[i].value; for(i=0;i<arr2.length;i++)obj[arr2[i].name]=arr2[i].value; for(p in obj)if(obj.hasOwnProperty(p))result.push({name:p,value:obj[p]}); // result: [{name: "lang", value: "German"}, {name: "age", value: "18"}, {name : "childs", value: '5'}] 

उन लोगों के लिए जो आधुनिक चीजों के साथ प्रयोग कर रहे हैं:

 var odd = [ { name : "1", arr: "in odd" }, { name : "3", arr: "in odd" } ]; var even = [ { name : "1", arr: "in even" }, { name : "2", arr: "in even" }, { name : "4", arr: "in even" } ]; // ---- // ES5 using Array.filter and Array.find function merge(a, b, prop){ var reduced = a.filter(function(aitem){ return ! b.find(function(bitem){ return aitem[prop] === bitem[prop]; }); }); return reduced.concat(b); } console.log( "ES5", merge(odd, even, "name") ); // ---- // ES6 arrow functions function merge(a, b, prop){ var reduced = a.filter( aitem => ! b.find ( bitem => aitem[prop] === bitem[prop]) ) return reduced.concat(b); } console.log( "ES6", merge(odd, even, "name") ); // ---- // ES6 one-liner var merge = (a, b, p) => a.filter( aa => ! b.find ( bb => aa[p] === bb[p]) ).concat(b); console.log( "ES6 one-liner", merge(odd, even, "name") ); // Results // ( stuff in the "b" array replaces things in the "a" array ) // [ // { // "name": "3", // "arr": "in odd" // }, // { // "name": "1", // "arr": "in even" // }, // { // "name": "2", // "arr": "in even" // }, // { // "name": "4", // "arr": "in even" // } // ] 

कुछ आसान ES6 जादू के साथ है:

डुप्लिकेट के साथ दो मर्ज करें:

 const a = [{a: 1}, {b: 2}] const b = [{a: 1}] const result = a.concat(b) // [{a: 1}, {b: 2}, {a: 1}] 

डुप्लिकेट के बिना यह उपरोक्त प्लस के समान है:

const distinct = [...new Set(result.map(item => item.YOUR_PROP_HERE))]

डुप्लिकेट को बदलते समय आप अपने ऑब्जेक्ट को इकट्ठा करने के लिए इस्तेमाल कर सकते हैं और फिर उस ऑब्जेक्ट को वापस सरणी में विस्तारित / फ्लैट कर सकते हैं। कुछ इस तरह:

 function merge(args) { args = Array.prototype.slice.call(arguments); var o = { }; for(var i = 0; i < args.length; ++i) for(var j = 0; j < args[i].length; ++j) o[args[i][j].name] = args[i][j].value; return o; } function expand(o) { var a = [ ]; for(var p in o) if(o.hasOwnProperty(p)) a.push({ name: p, value: o[p]}); return a; } var arr1 = new Array({name: "lang", value: "English"}, {name: "age", value: "18"}); var arr2 = new Array({name : "childs", value: '5'}, {name: "lang", value: "German"}); var arr3 = expand(merge(arr1, arr2)); 

मुझे नहीं पता कि यह सबसे तेज़ तरीका है, लेकिन यह किसी भी संख्या में इनपुट एरे के लिए काम करता है; उदाहरण के लिए, यह:

 var a = expand( merge( [{name: "lang", value: "English"}, {name: "age", value: "18"}], [{name: "childs", value: '5'}, {name: "lang", value: "German"}], [{name: 'lang', value: 'Pancakes'}] ) ); 

आपको "जर्मन" के साथ arr3 में "पेनकेक्स" द्वारा प्रतिस्थापित किया गया a ही चीज़ देता है

यह दृष्टिकोण मानता है कि आपके ऑब्जेक्ट्स के पास सभी समान हैं {name: ..., value: ...} कोर्स का कोर्स

आप इसे यहां काम कर देख सकते हैं (कृपया अपना कंसोल खोलें): http://jsfiddle.net/miguous/UtBbB/

अभी तक reduce() method का एक अन्य संस्करण:

 var arr1 = new Array({name: "lang", value: "English"}, {name: "age", value: "18"}); var arr2 = new Array({name : "childs", value: '5'}, {name: "lang", value: "German"}); var arr = arr1.concat(arr2).reduce(function(prev, current, index, array){ if(!(current.name in prev.keys)) { prev.keys[current.name] = index; prev.result.push(current); } else{ prev.result[prev.keys[current.name]] = current; } return prev; },{result: [], keys: {}}).result; document.getElementById("output").innerHTML = JSON.stringify(arr,null,2); 
 <pre id="output"/> 

JQuery मर्ज के बारे में क्या है?

http://api.jquery.com/jQuery.merge/

jsFiddle उदाहरण यहाँ: http://jsfiddle.net/ygByD/

मुझे एक ही समस्या का सामना करना पड़ रहा था और गुया उत्तर के आधार पर मैंने अंडरस्कोर पुस्तकालय बढ़ा दिया है और मुझे कुछ और कार्यक्षमता भी शामिल करनी थी जिनकी मुझे आवश्यकता थी। ये सार है

 /** * Merges two object-like arrays based on a key property and also merges its array-like attributes specified in objectPropertiesToMerge. * It also removes falsy values after merging object properties. * * @param firstArray The original object-like array. * @param secondArray An object-like array to add to the firstArray. * @param keyProperty The object property that will be used to check if objects from different arrays are the same or not. * @param objectPropertiesToMerge The list of object properties that you want to merge. It all must be arrays. * @returns The updated original array. */ function merge(firstArray, secondArray, keyProperty, objectPropertiesToMerge) { function mergeObjectProperties(object, otherObject, objectPropertiesToMerge) { _.each(objectPropertiesToMerge, function (eachProperty) { object[eachProperty] = _.chain(object[eachProperty]).union(otherObject[eachProperty]).compact().value(); }); } if (firstArray.length === 0) { _.each(secondArray, function (each) { firstArray.push(each); }); } else { _.each(secondArray, function (itemFromSecond) { var itemFromFirst = _.find(firstArray, function (item) { return item[keyProperty] === itemFromSecond[keyProperty]; }); if (itemFromFirst) { mergeObjectProperties(itemFromFirst, itemFromSecond, objectPropertiesToMerge); } else { firstArray.push(itemFromSecond); } }); } return firstArray; } _.mixin({ merge: merge }); 

आशा है कि यह उपयोगी हो! सादर!

मुझे हाल ही में इस समस्या से टकराया गया था और मैं यहां उत्तर देने की आशा के साथ आया था, लेकिन स्वीकृत उत्तर में उन दो छोरों के लिए उपयोग किया जाता है, जिन्हें मैं पसंद नहीं करता। मैं आखिर में अपना खुद का बनाने में कामयाब रहा किसी भी पुस्तकालय पर निर्भर नहीं करता है:

 function find(objArr, keyToFind){ var foundPos = objArr.map(function(ob){ return ob.type; }).indexOf(keyToFind); return foundPos; } function update(arr1,arr2){ for(var i = 0, len = arr2.length, current; i< len; i++){ var pos = find(arr1, arr2[i].name); current = arr2[i]; if(pos !== -1) for(var key in arr2) arr1[pos][key] = arr2[key]; else arr1[arr1.length] = current; } } 

यह arr1 का क्रम भी रखता है

हवाई अड्डे के साथ:

 _.uniqBy([...arr1, ...arr2], 'name') 

मेरे सिर के ऊपर से – jquery विस्तार की कोशिश

 var arr3 = jQuery.extend(arr1,arr2....) 

var newArray = yourArray.concat(otherArray); console.log('Concatenated newArray: ', newArray);

@ आप के जवाब पर आधारित लेकिन आदेश रखते हुए:

 var arr3 = []; for(var i in arr1){ var shared = false; for (var j in arr2) if (arr2[j].name == arr1[i].name) { arr3.push(arr1[j] shared = true; break; } if(!shared) arr3.push(arr1[i]) } for(var j in arr2){ var shared = false; for (var i in arr1) if (arr2[j].name == arr1[i].name) { shared = true; break; } if(!shared) arr3.push(arr2[j]) } arr3 

मुझे पता है कि यह समाधान कम कुशल है, लेकिन यदि आप ऑर्डर रखने और ऑब्जेक्ट अपडेट करने के लिए चाहते हैं तो यह आवश्यक है।

यहां एक jQuery प्लगइन है जो मैंने एक वस्तु द्वारा दो ऑब्जेक्ट सरणियों को मर्ज करने के लिए लिखा था। इस बात को ध्यान में रखें कि यह गंतव्य एरे को जगह में संशोधित करता है

 (function($) { $.extendObjectArray = function(destArray, srcArray, key) { for (var index = 0; index < srcArray.length; index++) { var srcObject = srcArray[index]; var existObject = destArray.filter(function(destObj) { return destObj[key] === srcObject[key]; }); if (existObject.length > 0) { var existingIndex = destArray.indexOf(existObject[0]); $.extend(true, destArray[existingIndex], srcObject); } else { destArray.push(srcObject); } } return destArray; }; })(jQuery); var arr1 = [ { name: "lang", value: "English" }, { name: "age", value: "18" } ]; var arr2 = [ { name: "childs", value: '5' }, { name: "lang", value: "German" } ]; var arr3 = $.extendObjectArray(arr1, arr2, 'name'); console.log(JSON.stringify(arr3, null, 2)); 
 .as-console-wrapper { top: 0; max-height: 100% !important; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 

आप चाहते हैं कि लॉर्डशिप का उपयोग करें _.uniq

 var arr3 = _.uniqBy(arr1.concat(arr2), 'name'); // es5 let arr3 = _.uniqBy([...arr1, ...arr2], 'name'); // es6 

Arr1 का आदेश, arr2 मामलों!

डॉक्स देखें https://lodash.com/docs/4.17.4#uniqBy