let a = {0: 'a', 1: 'b', length: 2}
Array.apply(null, a) // ['a', 'b']

ऐरे कंस्ट्रक्टर का उपयोग करना किसी ऐरे जैसी ऑब्जेक्ट को ऐरे में बदलने का सबसे तेज़ तरीका है उदा। jsperf

मैं यह जानना चाहता हूं कि यह कैसे काम करता है लेकिन मैं असफल रहा। ECMAScript-262 में, मुझे उस कोड को समझाने के लिए संगत तरीका नहीं मिल रहा है .

ऐरे कंस्ट्रक्टर एक ऐरे जैसी वस्तु को क्यों स्वीकार करता है, इसे एक ऐरे में बदल सकता है।

Array.apply(null, Array(x) ) और Array(x) के बीच अंतर

विरल सरणियों से निपटने के दौरान Array.apply(null, [args]) असंगत रूप से कार्य क्यों करता है?

0
Eriice 14 अगस्त 2019, 17:46

2 जवाब

सबसे बढ़िया उत्तर

Function#apply(), दूसरापैरामीटर एक array- लेता है। जैसे. एक सरणी जैसी मूल रूप से एक वस्तु है जिसमें संख्यात्मक कुंजियाँ होती हैं और एक length संपत्ति होती है, लेकिन जरूरी नहीं कि एक सरणी हो - उदाहरण के लिए arguments वस्तु एक सरणी जैसी होती है

उस पैरामीटर को उस फ़ंक्शन को आपूर्ति की जाएगी जिसे आप apply कहते हैं, जैसे कि यह उस फ़ंक्शन के लिए सभी तर्क हैं:

function foo(one, two, three) {
  console.log("one:", one);
  console.log("two:", two);
  console.log("three:", three);
}
//normal invocation
foo("hello", "world", "!");

//.apply using an array-like
foo.apply(null, {0: "nice", 1: "meeting", 2: "you", length: 3});

//.apply using an array
foo.apply(null, ["see", "you", "later"]);

इसलिए, जब आप Array.apply(null, {0: 'a', 1: 'b', length: 2}) को कॉल करते हैं जो कॉल Array('a', 'b') के बराबर है - सरणी निर्माता का उपयोग करके अनेक तर्कों के साथ उन तर्कों से एक सरणी उत्पन्न करता है:

console.log(Array("a", "b"));

इस प्रकार जब आप कंस्ट्रक्टर फ़ंक्शन पर apply को कॉल करते हैं तो आपको वह व्यवहार मिलता है।

ES6 में, किसी सरणी को .apply के दूसरे तर्क के रूप में पास करना लगभग स्प्रेड सिंटैक्स का उपयोग करने जैसा ही है:

function foo(one, two, three) {
  console.log("one:", one);
  console.log("two:", two);
  console.log("three:", three);
}

const arrayArgs = ["hello", "world", "!"];
foo(...arrayArgs);

हालांकि, यह सरणी-पसंद के साथ काम नहीं करता है:

function foo(one, two, three) {
  console.log("one:", one);
  console.log("two:", two);
  console.log("three:", three);
}

const arrayLikeArgs = {0: "hello", 1: "world", 2: "!", length: 3};
foo(...arrayLikeArgs);
1
VLAZ 16 अगस्त 2019, 13:43

apply() के साथ आप एक फ़ंक्शन को कॉल कर सकते हैं और तर्कों को पास कर सकते हैं जिन्हें सरणी जैसी वस्तु के रूप में उपयोग किया जाना चाहिए।

तो Array.apply(null, {0: 'a', 1: 'b', length: 2}) Array('a','b') के बराबर है

और एक ऐरे के रूप में (MDN का उपयोग करके निर्माण किया जा सकता है - सरणी):

new Array(element0, element1[, ...[, elementN]])

और जैसा कि एक सरणी उन वस्तुओं से संबंधित है जिनका निर्माण new के बिना किया जा सकता है, दिया गया कोड उन तत्वों के साथ एक सरणी का निर्माण करेगा।

1
t.niese 14 अगस्त 2019, 17:53