2013-05-13 5 views
8

2 बड़े, संभावित रूप से बहुत बड़े घोंसले वाले जावास्क्रिप्ट सरणी के साथ। एक वर्तमान है और दूसरा इस सरणी का पिछला पुनरावृत्ति है। फ़ंक्शन को सभी अलग-अलग तत्वों को ढूंढने और कुछ भी बदलने पर कार्य करने की आवश्यकता होगी।जावास्क्रिप्ट सभी अलग-अलग नेस्टेड ऐरे तत्वों को खोजने के लिए सर्वश्रेष्ठ अभ्यास

मुझे पता है कि ऐसा करने के लिए कोई फ़ंक्शन कैसे करना है, मैं सोच रहा हूं कि ऐसी चीजें करने के लिए सर्वोत्तम अभ्यास क्या हैं। किसी भी अच्छी सलाह की सराहना की जाएगी। मैं अलग-अलग तत्वों के जवाबों को संभालने वाले jQuery के साथ देशी जावास्क्रिप्ट का उपयोग करने के लिए देख रहा हूं।

यह प्रश्न कई चीजों से संबंधित है।

  1. वस्तुओं तुलना करने के लिए लिए सबसे कारगर तरीका क्या है। जावास्क्रिप्ट जांच में, यदि, यदि कोई ऑब्जेक्ट किसी अन्य ऑब्जेक्ट के बराबर या बराबर नहीं है, तो हमेशा यह कहेंगे कि यह बराबर नहीं है, भले ही वे बराबर हों। इस प्रकार वस्तुओं को तोड़ने और तुलना करने की आवश्यकता है।

  2. परिणाम वापस करने का सबसे अच्छा तरीका क्या है? क्या आप मतभेदों की एक सरणी बनाते हैं? हालांकि पहली सरणी के दौरान आप ऑब्जेक्ट्स को साफ़ करते हैं, जैसा कि वे पहले होते हैं, या वापस आने के लिए पूरी तरह से नई सरणी बनाते हैं?

+0

जांचें कि लॉनाश लाइब्रेरी इसे कैसे करती है। Http://github.com/bestiejs/lodash – lucuma

+0

अलग-अलग तत्वों के रूप में अलग-अलग क्रम में, जब वे 2 की तुलना करते हैं तो वे अलग-अलग होते हैं? या क्या हम देख रहे हैं कि 2 सरणी कुल में क्या हैं, आदेश के अप्रासंगिक हैं? शायद आप हमें दिखा सकते हैं कि आप वर्तमान में क्या कर रहे हैं और फिर आप सर्वोत्तम अभ्यास की कुछ राय प्राप्त कर सकते हैं। दुर्भाग्य से यह प्रश्न वर्तमान में "वास्तविक प्रश्न नहीं" सिंड्रोम से पीड़ित है। – Xotic750

+0

का डुप्लिकेट ["जावास्क्रिप्ट सरणी का उपयोग करके एक सेट अंतर की गणना करने का सबसे तेज़ या सबसे शानदार तरीका क्या है?"] (Http://stackoverflow.com/questions/1723168/what-is-the-fastest-or-most- सुरुचिपूर्ण -वे-टू-कंप्यूट-ए-सेट-फ़र्क-उपयोग-जावस्क) और ["जावास्क्रिप्ट सरणी अंतर"] (http://stackoverflow.com/questions/1187518/javascript-array-difference)। –

उत्तर

1
function CompareArrays(arr1, arr2){  
    for(var key in arr1){ 
     if(arr1[key] !== arr2[key]){ 
      // traverse into nested array 
      if(typeof(arr1[key]) == 'object' || typeof(arr2[key]) == 'object'){     
       CompareArrays(arr1[key], arr2[key]); 
      } 
     }else{ 
       delete arr2[key]; 
     } 
    } 
} 

var a1 = [1,2,3,["a","b","c"],4,5,6,["d","e","f"]]; 
var a2 = [1,2,5445,["a","tt","c"],4,5,336,["d","edee","ffdf"], 'blablabla', 'I\'m extra']; 

CompareArrays(a1, a2); 
console.log(a2); 

यह दूसरा दिया पर दिखेगा। और इसे किसी साझा साझा मूल्यों को हटाने में संशोधित करें। सरणी अभी भी बरकरार रहेगी लेकिन किसी भी मान जो समान थे अब अपरिभाषित हैं।

0

व्यक्तिगत रूप से, मुझे लगता है कि रिकर्सन इस स्थिति के लिए एक अच्छा अभ्यास है।

console.clear(); 
// Compare 2 nested arrays, do something if values don't match 
function CompareArrays(arr1, arr2){ 

    for(var i=0;i<arr1.length;i++){ 
     if(typeof arr1[i] === "object"){ 
      // traverse into nested array 
      CompareArrays(arr1[i], arr2[i]); 
     }else{ 
      if (arr1[i] != arr2[i]){ 
       // do something! 
       console.log("mismatch @ "+ i +" a1: "+arr1[i]+" a2: "+ arr2[i]); 
      } 
     } 
    } 
} 

var a1 = [1,2,3,["a","b","c"],4,5,6,["d","e","f"]]; 
var a2 = [1,2,55,["a","tt","c"],4,5,6,["d","e","f"]]; 

CompareArrays(a1, a2); 

काम कर बेला: http://jsfiddle.net/ymSmP/5

+0

यह मानता है कि ए 1 में सभी कुंजी ए 2 में होंगी। और कि ए 2 में अलग-अलग चाबियाँ नहीं होंगी। निश्चित रूप से – Iscariot

+0

हां। आपने यह नहीं कहा कि सरणी भी अलग-अलग आकार होंगे। – carrabino

संबंधित मुद्दे