2015-09-12 7 views
6

के साथ प्रतिस्थापित करें, आज ऑब्जेक्ट्स के सरणी के अंदर एक मिलान ऑब्जेक्ट को प्रतिस्थापित करने के लिए मैं SO question पर आया।जावास्क्रिप्ट: सीधे इंडेक्स बनाम Array.splice()

ऐसा करने के लिए, वे lodash का उपयोग कर वस्तुओं की सरणी के अंदर मिलान करने वाली वस्तु का सूचकांक ढूंढ रहे हैं।

var users = [{user: "Kamal"}, {user: "Vivek"}, {user: "Guna"}] 
var idx = _.findIndex(users, {user: "Vivek"}); // returns 1 

अब वे जोड़() का इस्तेमाल किया इस तरह की जगह,

users.splice(idx, 1, {user: "Gowtham"}) 

लेकिन क्यों नहीं,

users[idx] = {user: "Gowtham"}; 

अब मेरे सवाल है, तो ऐसा कोई कारण, ऐसा करने के लिए नहीं है या splice() का उपयोग करने के लिए?

क्योंकि array[index] = 'something'; का उपयोग करना इतना आसान है। यही है ना ?

+0

यह सच है कि का उपयोग कर 'सरणी [सूचकांक]' की तुलना में तेजी है 'Array.splice()': http://jsperf.com/array-index-vs-splice। लेकिन शायद आपका माइलेज सरणी के आकार के आधार पर भिन्न हो सकता है? – Terry

+1

जब तक आप हटाए गए मूल्य (जो यहां नहीं किया जा रहा है) प्राप्त करना चाहते हैं, तो इंडेक्स असाइनमेंट अधिक समझदार होगा और अधिक तेज़ी से हो सकता है। –

+1

आह, एक अंतर यह है कि '.plice() '' .push() 'की तरह कार्य करेगा यदि' idx' सरणी के' लम्बाई 'से परे है, जबकि इंडेक्स असाइनमेंट सरणी की लंबाई बढ़ाएगा। –

उत्तर

2

केवल कारणों वे ऐसा कर सकते हैं:

  1. वे भी पिछले मान
  2. वे 'चतुराई' मामले हैंडल करना चाहते हैं प्राप्त करना चाहते हैं जहां IDX == -1 पिछले तत्व की जगह सरणी में, इसे -1 पर डालने के बजाय, क्योंकि splice विशेष रूप से नकारात्मक पूर्णांक का इलाज करेगा। (यह ऐसा प्रतीत नहीं होता यूज-केस आप वर्णित फिट)
ज्यादातर मामलों में

, arr[i] = "value"; हो जाएगा की तुलना में बेहतर arr.splice(i, 1, "value");

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