অ্যারে থেকে প্রথম এন সংখ্যক উপাদান কীভাবে পাবেন


383

আমি জাভাস্ক্রিপ্ট (ES6) / ফেসবুক প্রতিক্রিয়া নিয়ে কাজ করছি এবং আকারে পরিবর্তিত হয় এমন একটি অ্যারের প্রথম 3 উপাদান পাওয়ার চেষ্টা করছি। আমি লিনক নিতে (এন) এর সমতুল্য চাই।

আমার জেএসএক্স ফাইলে আমার কাছে নিম্নলিখিতগুলি রয়েছে:

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);আবার পুনরুক্তি করব?
জেসি কর্নাগন

আপনি কেন মানচিত্র ব্যবহার করতে চান? যদি আমি আপনার প্রয়োজনীয়তাটি সঠিকভাবে বুঝতে পারি তবে আপনি প্রথম এন উপাদানগুলি নেওয়ার জন্য কেবল স্লাইস ব্যবহার করতে পারেন।
অভিষেক জৈন

শিক্ষক যদি মানচিত্র ব্যবহার করতে বলেন? :) আমি দুঃখিত যদি এটি একটি বৈধ প্রশ্ন, তবে এটি কেবল হোম ওয়ার্কের মতো মনে হয়েছিল।
দিয়নেওয়ালা

জনগণের জন্য আরও কার্যকর প্রমাণিত হয়েছে এমনটির গ্রহণযোগ্য উত্তরটি পরিবর্তন করে বিবেচনা করুন
ব্রায়ান ওয়েবস্টার

উত্তর:


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>   
)

618

nএকটি অ্যারের প্রথম উপাদানগুলি পেতে , ব্যবহার করুন

array.slice(0, n);

57
নোট করুন যে sliceঅ্যারেতে ফাংশনটি অ্যারের অগভীর অনুলিপি প্রদান করে এবং মূল অ্যারেটি সংশোধন করে না। বিকাশকারী.মোজিলা.আর.ইন-
ড্যানি হার্ডিং

30

এটি আশ্চর্যজনক হতে পারে তবে lengthঅ্যারের সম্পত্তি কেবল অ্যারে উপাদানগুলির সংখ্যা পেতে ব্যবহৃত হয় না তবে এটি লিখনযোগ্যও হয় এবং অ্যারের দৈর্ঘ্য MDN লিঙ্ক সেট করতে ব্যবহার করা যেতে পারে । এটি অ্যারেটি পরিবর্তন করবে।

যদি বর্তমান অ্যারের প্রয়োজন হয় না এবং আপনি অপরিবর্তনশীলতা সম্পর্কে চিন্তা করেন না বা কোনও গেমের জন্য মেমরি বরাদ্দ করতে চান না তবে দ্রুততম উপায় হ'ল

arr.length = n

একটি অ্যারে খালি করতে

arr.length = 0

আপনি কি নিশ্চিত যে এটি এর চেয়ে দ্রুততর arr = []?
গ্রেডফক্স

3
এখানে সুবিধা মেমরি বরাদ্দ এড়ানো হয়। রান টাইমে নতুন আইটেম শুরু করা গেমসের জন্য আবর্জনা সংগ্রহকারী এবং জাঙ্ককে ট্রিগার করে।
পাভেল

উল্লেখযোগ্য যে এটি অ্যারেটিকে পরিবর্তন করতে পারে, যেখানে টুকরোটি অগভীর অনুলিপি ফিরে আসবে। আপনার যদি স্থায়ীভাবে কাটা কাটা আইটেমগুলি ব্যবহার করার প্রয়োজন হয় তবে এটি একটি বড় পার্থক্য হয়ে যায়।

1
@ না, ঠিক আছে, আমি এটি আরও কিছুটা স্পষ্ট করে তুলব
পাওয়েল

4
এটি অ্যারে থেকে প্রসারিত করবে যদি এটি এন থেকে ছোট হয়
Oldrich Svec

13

মানচিত্রের ফাংশনটি ব্যবহার করে এটি করার চেষ্টা করবেন না। মানচিত্রের ফাংশনটি একটি জিনিস থেকে অন্যটিতে মানচিত্রের জন্য ব্যবহার করা উচিত। যখন ইনপুট এবং আউটপুট মিলবে।

এই ক্ষেত্রে ফিল্টার ফাংশন ব্যবহার করুন যা অ্যারেতেও উপলব্ধ। ফিল্টার ফাংশনটি ব্যবহৃত হয় যখন আপনি নির্বাচিতভাবে মানদণ্ডকে নির্দিষ্ট মানদণ্ডে নিতে চান। তারপরে আপনি আপনার কোডটি লিখতে পারেন

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

1
আপনি সামগ্রিকভাবে সঠিক, তবে শব্দার্থগতভাবে আপনার প্রথমে উপাদানগুলির সেটটি ফিল্টার করার জন্য ফিল্টারটি ব্যবহার করা উচিত , তারপরে, আপনি যদি এই পদ্ধতির দিকে নিচ্ছেন তবে ফিল্টার ডাউন ডাউন মানচিত্রটি ম্যাপ করুন।
ক্রিস

8
ফিল্টার ফাংশন অ্যারের সমস্ত উপাদানগুলির মধ্য দিয়ে যায়, যখন স্লাইসটি না ঘটে, তাই স্লাইসটি ব্যবহার করা আরও ভাল পারফরম্যান্ট-বুদ্ধিমান, তাই না?
এলকিউফালতাবা

11

আপনি indexঅ্যারে ব্যবহার করে ফিল্টার করতে পারেন ।

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


2
.filterএটি নিজেই একটি দুর্দান্ত পছন্দ নয়, অন্ততপক্ষে ইনপুট অ্যারে দীর্ঘ হতে পারে না তবে। .filterঅ্যারের প্রতিটি উপাদান এর শর্তটি পরীক্ষা করে যায়। .sliceএটি না করে কেবল প্রথম এন উপাদানগুলি বের করে নেবে এবং তারপরে প্রক্রিয়াজাতকরণ বন্ধ করবে - যা অবশ্যই আপনি দীর্ঘ তালিকার জন্য চান would (যেমন @ এলকিউফালতাবা অন্য উত্তরের মন্তব্যে ইতিমধ্যে বলেছিলেন।)
মাইকবিটেন

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);

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.