किसी सरणी से तत्वों की पहली N संख्या कैसे प्राप्त करें


383

मैं जावास्क्रिप्ट (ईएस 6) / फेसबुक प्रतिक्रिया के साथ काम कर रहा हूं और सरणी के पहले 3 तत्वों को प्राप्त करने की कोशिश कर रहा हूं जो आकार में भिन्न हैं। मैं Linq ले (n) के बराबर करना चाहूंगा।

मेरी Jsx फ़ाइल में मेरे पास निम्नलिखित हैं:

var items = list.map(i => {
  return (
    <myview item={i} key={i.id} />
  );
});

फिर मैंने पहले 3 आइटम प्राप्त करने की कोशिश की

  var map = new Map(list);
    map.size = 3;
    var items = map(i => {
      return (<SpotlightLandingGlobalInboxItem item={i} key={i.id} />);
    });

यह काम नहीं किया क्योंकि मानचित्र में एक निर्धारित कार्य नहीं है।

क्या आप मदद कर सकते हैं?


4
शायद मैं इस समस्या को गलत समझ रहा हूं, लेकिन कुछ ऐसा क्यों नहीं है list.slice(0, 3);और फिर इसे पुन: व्यवस्थित करें?
जेसी कर्णघन

आप मानचित्र का उपयोग क्यों करना चाहते हैं? यदि मैं आपकी आवश्यकता को सही ढंग से समझता हूं, तो आप पहले n तत्वों को लेने के लिए स्लाइस का उपयोग कर सकते हैं।
अभिषेक जैन

यदि शिक्षक ने मानचित्र का उपयोग करने के लिए कहा है? :) मैं माफी चाहता हूँ अगर यह एक वैध सवाल है, लेकिन यह सिर्फ एक होमवर्क की तरह लगा।
डायनेवाला

कृपया उस स्वीकृत उत्तर को बदलने के बारे में विचार करें जो जनता के लिए अधिक उपयोगी साबित हुआ है
ब्रायन वेबस्टर

जवाबों:


401

मेरा मानना ​​है कि आप जो खोज रहे हैं वह है:

// ...inside the render() function

var size = 3;
var items = list.slice(0, size).map(i => {
    return <myview item={i} key={i.id} />
}

return (
  <div>
    {items}
  </div>   
)

619

nकिसी सरणी के पहले तत्वों को प्राप्त करने के लिए , का उपयोग करें

array.slice(0, n);

58
ध्यान दें कि sliceसरणियों पर फ़ंक्शन सरणी की एक उथली प्रतिलिपि देता है, और मूल सरणी को संशोधित नहीं करता है। developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
डैनी हार्डिंग

30

यह आश्चर्य की बात हो सकती है लेकिन lengthएक सरणी की संपत्ति का उपयोग न केवल सरणी तत्वों की संख्या प्राप्त करने के लिए किया जाता है, बल्कि यह योग्य भी है और इसका उपयोग सरणी की लंबाई एमडीएन लिंक को सेट करने के लिए किया जा सकता है । यह एरे को म्यूट करेगा।

यदि वर्तमान सरणी की अब और आवश्यकता नहीं है और आप अपरिवर्तनीयता की परवाह नहीं करते हैं या स्मृति को आवंटित नहीं करना चाहते हैं तो खेल के लिए सबसे तेज़ तरीका है।

arr.length = n

एक सरणी खाली करने के लिए

arr.length = 0

क्या आपको यकीन है कि यह इससे तेज है arr = []?
ग्रेफॉक्स 29

3
यहां लाभ स्मृति आवंटन से बचा जा रहा है। रन टाइम में नई वस्तुओं की शुरुआत करना, यानी गेम्स के लिए कचरा इकट्ठा करने वाले कलेक्टर और जंक को ट्रिगर करना।
पावेल

वर्थ ने उल्लेख किया कि यह सरणी को बदल देगा, जहां स्लाइस एक उथली प्रतिलिपि लौटाएगा। यह एक बड़ा अंतर बन जाता है अगर आपको उन वस्तुओं का उपयोग करने की आवश्यकता होती है जिन्हें आप केवल स्थायी रूप से काट दिया जाता है।
1

1
@ ठीक है, मैं इसे थोड़ा और स्पष्ट कर दूंगा
पावेल

4
यह सरणी का विस्तार भी करेगा यदि यह N
Oldrich Svec

13

मानचित्र फ़ंक्शन का उपयोग करके ऐसा करने का प्रयास न करें। मानचित्र फ़ंक्शन का उपयोग एक चीज़ से दूसरी चीज़ों के मान को मैप करने के लिए किया जाना चाहिए। जब इनपुट और आउटपुट की संख्या मेल खाती है।

इस स्थिति में फ़िल्टर फ़ंक्शन का उपयोग करें जो सरणी पर भी उपलब्ध है। फ़िल्टर फ़ंक्शन का उपयोग तब किया जाता है जब आप चुनिंदा मानदंड निर्धारित करना चाहते हैं। फिर आप अपना कोड जैसे लिख सकते हैं

var items = list
             .filter((i, index) => (index < 3))
             .map((i, index) => {
                   return (
                     <myview item={i} key={i.id} />
                   );
              });

1
आप समग्र रूप से सही हैं, लेकिन शब्दार्थ आपको पहले तत्वों के सेट को फ़िल्टर करने के लिए फ़िल्टर का उपयोग करना चाहिए , फिर, यदि आप इस दृष्टिकोण को ले रहे हैं तो फ़िल्टर किए गए सेट को मैप करें।
क्रिस

8
फ़िल्टर फ़ंक्शन ऐरे में सभी तत्वों से गुजरेगा, जबकि स्लाइस नहीं होगा, इसलिए स्लाइस का उपयोग करना बेहतर प्रदर्शन-वार है, है ना?
elQueFaltaba

11

आप indexसरणी का उपयोग करके फ़िल्टर कर सकते हैं ।

var months = ['Jan', 'March', 'April', 'June'];
months = months.filter((month,idx) => idx < 2)
console.log(months);


2
.filterअपने आप में यह एक बढ़िया विकल्प नहीं है, कम से कम नहीं तो इनपुट सरणी लंबी हो सकती है। .filterसरणी के हर तत्व के माध्यम से अपनी स्थिति की जाँच करता है। .sliceऐसा नहीं करेगा, लेकिन सिर्फ पहले n तत्वों को निकालेगा और फिर प्रसंस्करण बंद कर देगा - जो निश्चित रूप से आप एक लंबी सूची के लिए चाहते हैं। (जैसा कि @elQueFaltaba ने पहले ही एक और जवाब के लिए टिप्पणियों में कहा।)
माइकबटन

9

निम्नलिखित ने मेरे लिए काम किया।

array.slice( where_to_start_deleting, array.length )

यहाँ एक उदाहरण है

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.slice(2, fruits.length);
//Banana,Orange  ->These first two we get as resultant

4
पहले उदाहरण में आप उपयोग करते हैं sliceलेकिन दूसरे में आप उपयोग करते हैं splice
वेसलेव

3
यह भी गलत है। इससे आपको मिलेगा ["Apple", "Mango"]। स्लाइस का पहला भाग "कहाँ से हटाना शुरू करना है" नहीं है, यह वह जगह है जहाँ से स्लाइस शुरू करना है। यह मूल सरणी को संशोधित नहीं करता है और कुछ भी नहीं हटाएगा।
एंजेल जोसेफ पिस्कोला


0

फ़िल्टर का उपयोग करें

सबसे अच्छा अभ्यास नहीं है लेकिन एक और तरीका है

const cutArrByN = arr.filter((item, idx) => idx < n);

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.