पर पारित सरणी को पारित किया गया है, मैं एक फ़ंक्शन में 2 सरणी पास करता हूं और एक सरणी से दूसरे सरणी में एक विशिष्ट प्रविष्टि को स्थानांतरित करना चाहता हूं। MoveDatum फ़ंक्शन स्वयं underscorejs विधियों को अस्वीकार और फ़िल्टर करता है। मेरी समस्या यह है कि मूल सरणी बदले नहीं जाते हैं, जैसे कि मैं सरणी को मान के रूप में पास कर रहा था और संदर्भ के रूप में नहीं। विशिष्ट प्रविष्टि सही ढंग से स्थानांतरित हो जाती है, लेकिन जैसा कि मैंने कहा, प्रभाव केवल स्थानीय है। मूल सरणी बदलने के लिए मुझे क्या बदलना है?फ़ंक्शन
कॉल समारोह:
this.moveDatum(sourceArr, targetArr, id)
समारोह में ही:
function moveDatum(srcDS, trgDS, id) {
var ds = _(srcDS).filter(function(el) {
return el.uid === uid;
});
srcDS = _(srcDS).reject(function(el) {
return el.uid === uid;
});
trgDS.push(ds[0]);
return this;
}
मदद
आप इसे '.filter() 'या' .reject()' के साथ नहीं कर सकते क्योंकि वे नए सरणी बनाते हैं। 'TrgDS.push (डीएस [0]) '(जैसे आप कर रहे हैं) के साथ' trgDS' को संशोधित करके आप 'targetArr' की सामग्री को बदल सकते हैं, क्योंकि दोनों एक ही सरणी को संदर्भित करते हैं, लेकिन आप' SourceArr' का कारण नहीं बना सकते एक नई सरणी में 'srcDS' असाइन करके एक नई सरणी का संदर्भ लें। – nnnnnn
हो सकता है कि आप इस प्रश्न और स्पष्टीकरण उपयोगी पा सकते हैं: http://stackoverflow.com/questions/6605640/javascript-by-reference-vs-by-value – Stefan
@nnnnnn धन्यवाद, मुझे लगता है कि अब मैं समझ क्या है चल रहा है, मूल रूप से मैं अस्वीकार() के साथ बनाई गई नई सरणी में srcDS का संदर्भ देता हूं और मूल रूप से पारित सरणी का संदर्भ खो देता हूं जिसे मैं वास्तव में बदलना चाहता हूं, क्या इसे ठीक करने का एक आसान तरीका होगा? – macg