2016-10-09 7 views
5

मैं इस JavaScript ऑब्जेक्ट में नई सरणी वस्तुओं सम्मिलित करें:मौजूदा ऑब्जेक्ट js

var countryArray = [{ 
"country" : 'Indonesia', 
"state" : ['DKI','Bali'], 
}, 
{ 
"country" : 'Malaysia', 
"state" : ['Penang','Johor'], 
}]; 

var newArr = [{ "country" : 'Malaysia', "state" : ['Kelantan'] }] 

मैं कैसे मर्ज कर सकते हैं या संबंधित CountryArray को newArr जोड़ें।

अपेक्षित परिणाम:

var countryArray = [{ 
"country" : 'Indonesia', 
"state" : ['DKI','Bali'], 
}, 
{ 
"country" : 'Malaysia', 
"state" : ['Penang','Johor','Kelantan'], 
}]; 
+2

कि अनावश्यक रूप से कठोर और रचनात्मक नहीं लगता है में मदद मिलेगी। यह वास्तव में एक साधारण सवाल नहीं है - मुझे थोड़ी देर के लिए खोज करने के बाद एक सरल जवाब नहीं मिला - और यह मानना ​​उचित नहीं है कि कोई प्रयास नहीं किया गया था। जाहिर है कि वह साइट पर नया है और शुरुआत करने वाला है - उसे संभावित रूप से अलगाव करने की बजाय, शायद आप भविष्य में अलग-अलग क्या कर सकते हैं, जैसे कि वह पहले से ही क्या कोशिश कर रही है उसे साझा कर सकती है? –

+0

टिप्पणियों के लिए धन्यवाद, लेकिन कभी सोचिए कि मैंने कुछ भी नहीं किया है। मैंने कंसट, पुश और बहुत कुछ सहित बहुत कोशिश की है। किसी भी पोस्ट की तलाश करें जो मदद करेगी, लेकिन मैं समस्या को हल नहीं कर सका। यही कारण है कि मैं इस मंच में पूछ रहा हूँ। और उस स्क्रिप्ट को मेरे प्रश्न में रखते हुए, इसका मतलब यह नहीं है कि मुझे बहुत कुछ करना है? बीटीडब्ल्यू, आप सब अच्छे हैं। – Yusnee

उत्तर

1

आप मर्ज करना चाहते हैं, तो कभी-कभी आप के साथ-ब्याह करने के लिए की जरूरत है। इसे आज़माएं:

var countryArray = [{ 
    "country" : "Indonesia", 
    "state" : ["DKI","Bali"], 
    }, 
    { 
    "country" : "Malaysia", 
    "state" : ["Penang","Johor"], 
    }]; 

आने वाले नए डेटा के साथ विलय करने के लिए;

var newArr = [{ "country" : "Malaysia", "state" : ["Kelantan"] }]; 

MergeArray(countryArray,newArr); 
console.table(countryArray); 

स्प्लिस आने वाले डेटा को बनाने के लिए;

var DelArray = [{ "country" : "Malaysia", "state" : ["Penang"] }]; 

SpliceArray(countryArray,DelArray); 
console.table(countryArray); 

और संबंधित कार्य;

function MergeArray(countryArray,newArr) { 
var a = 0; 
    $.each(newArr, function (key, data1) { 
    var b = 0; 
    $.each(countryArray, function (key, data2) { 

     if(data1.country == data2.country) { // match the same country 

    countryArray[b]["state"] = countryArray[b]["state"].concat(newArr[a]["state"]); 

     } 

    b++; }); 
    a++; }); 
} 

function SpliceArray(countryArray,DelArray) { 
    var a=0; 
      $.each(DelArray, function (key, data1) { 
       var b=0; 
       $.each(countryArray, function (key, data2) { 

         if(data1.country == data2.country) { // get same country  

         console.log(countryArray[b]["state"]) // ["Penang", "Johor", "Kelantan"] 

          for(var c=0; c < countryArray[b]["state"].length; c++){ // loop in countryArray state[] 

          console.log(DelArray[a]['state']); // to remove : ["Penang"] 

           if(countryArray[b]["state"][c] == DelArray[a]['state']) { 

           countryArray[b]["state"].splice(c,1); // remove ["Penang"] 

           } 
          } 
         } 
       b++; 
       }); 
     a++; 
     }); 

    } 

आशा

+0

महान सराहना। लेकिन मेरे पास इसके लिए मेरा समाधान पहले से ही है। असल में वही है। – Yusnee

5

concat?

EDIT2 concat आप के राज्यों में जोड़ना चाहते हैं के रूप में:

countryArray = countryArray.concat(newArr); 

संपादित ठीक है, मैं देख रहा हूँ, तुम क्या newArr में, कोई और अधिक concat है के अनुसार countryArray के राज्यों को अपडेट करना चाहते countryArray क्या newArr

में है के अनुसार
var countryArray = [{ 
    "country" : "Indonesia", 
    "state" : ["DKI","Bali"], 
    }, 
    { 
    "country" : "Malaysia", 
    "state" : ["Penang","Johor"], 
    }]; 

    var newArr = [{ "country" : "Malaysia", "state" : ["Kelantan"] }]; 

    alert("Before while: " + countryArray[1]["state"]); 
    var i=0; 
    while(countryArray[i]) { 
     var j=0; 
     while(newArr[j]) { 
     if(countryArray[i]["country"] == newArr[j]["country"]) { 
      countryArray[i]["state"] = countryArray[i]["state"].concat(newArr[j]["state"]); 
     } 
     j++; 
     } 
     i++; 
    } 
    alert("After while: " + countryArray[1]["state"]); 
+0

concat अपने सुझाव यह विलय नहीं के रूप में लेकिन नई सरणी :( – Yusnee

+0

ठीक @Yusnee बनाने, मेरे संपादित करें :) –

+0

@ लंदन स्मिथ देखते हैं। मेरी मदद करने के आपके प्रयास के लिए धन्यवाद। लेकिन कंसोल के साथ।तालिका (countryArray), मैं पेनांग और जोहोर खो दिया है। इसका अर्थ यह है कि इसे केवल मर्ज करें, उन्हें मर्ज न करें। – Yusnee

5

मूल रूप से आप जो टी विलीन हो जाती है JavaScript merging objects by id का एक परिवर्तन चाहते हैं वह मूल्य सरणी।

  1. हैश तालिका बनाएं।
  2. दोनों सरणी को दोहराएं और आईडी द्वारा अनुक्रमित हैश तालिका में डेटा स्टोर करें। यदि उस आईडी के साथ पहले से ही कुछ डेटा है, तो इसे मर्ज करें।
  3. हैश मानचित्र के मानों के साथ एक सरणी प्राप्त करें।

var countryArray = [{ 
 
    "country" : 'Indonesia', 
 
    "state" : ['DKI','Bali'], 
 
}, { 
 
    "country" : 'Malaysia', 
 
    "state" : ['Penang','Johor'], 
 
}]; 
 
var newArr = [{ 
 
    "country" : 'Malaysia', 
 
    "state" : ['Kelantan'] 
 
}]; 
 
function mergeById(objs, id) { 
 
    var hash = new Map(); 
 
    objs.forEach(function(obj) { 
 
    var merged = hash.get(obj[id]) || {}; 
 
    Object.keys(obj).forEach(function(key) { 
 
     if (key === id) return merged[id] = obj[id]; 
 
     if (!merged[key]) merged[key] = []; 
 
     if (Array.isArray(obj[key])) [].push.apply(merged[key], obj[key]); 
 
     else merged[key].push(obj[key]); 
 
    }) 
 
    hash.set(obj[id], merged) 
 
    }); 
 
    return Array.from(hash.values()); 
 
} 
 
console.log(mergeById(countryArray.concat(newArr), "country"));

+0

मदद करने के लिए खुश हूँ @ Oriol भगवान ने तुम्हें blesh। आप सभी को है कि मेरे लिए समय व्यर्थ है के लिए धन्यवाद। मेरे देश में 8:25 बजे नहीं है। मैं पूरी रात मदद की तलाश नहीं सो रहा हूँ। आपके प्रयास के लिए – Yusnee

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