অ্যারে থেকে সুবারে কীভাবে পাবেন?


উত্তর:


407

একবার দেখুন Array.slice(begin, end)

const ar  = [1, 2, 3, 4, 5];

// slice from 1..3 - add 1 as the end index is not included

const ar2 = ar.slice(1, 3 + 1);

console.log(ar2);


22
এখানে সম্ভবত স্পষ্টভাবে উল্লেখ করা মূল্যবান যে আসলটি arঅবিস্মরণীয়। console.log(ar); // -> [1, 2, 3, 4, 5]
ডেমোনেক্সমাচিনা

17

এর সাধারণ ব্যবহারের জন্য slice, অ্যারে ক্লাসে আমার এক্সটেনশনটি ব্যবহার করুন:

Array.prototype.subarray = function(start, end) {
    if (!end) { end = -1; } 
    return this.slice(start, this.length + 1 - (end * -1));
};

তারপর:

var bigArr = ["a", "b", "c", "fd", "ze"];

পরীক্ষা 1 :

bigArr.subarray(1, -1);

<["বি", "সি", "এফডি", "জেড"]

test2:

bigArr.subarray(2, -2);

<["সি", "এফডি"]

test3:

bigArr.subarray(2);

<["সি", "এফডি", "জেডে"]

অন্য ভাষা থেকে অর্থাত্ বিকাশকারীদের (যেমন গ্রোভি) আরও সহজ হতে পারে।



কে_7 কী বলেছে; বিশেষত, বিল্টিন্স (অবজেক্ট, অ্যারে, প্রতিশ্রুতি, ইত্যাদি) বানর-প্যাচিং করা খুব দুষ্টু। বিখ্যাত উদাহরণ দেখুন একটি পুনঃনামকরণ অত্যাচার MooTools প্রস্তাবিত নেটিভ এর Array.prototype.containsজন্য Array.prototype.includes
ডেমোনেক্সমাছিনা

উল্লেখ করার মতো নয়, আপনার subarrayপদ্ধতিটি অপ্রত্যাশিত ফলাফল সরবরাহ করে। bigArr.slice(1,-1)প্রত্যাবর্তন ['b','c','fd'], যা আপনি প্রত্যাশা করবেন (-1 নতুন অ্যারের শেষে একটি উপাদানকে নক করে)। কিন্তু bigArr.subarray(1,-1)আয় হিসাবে একই bigArr.subarray(1)যা বলতে হয়, সবকিছু শেষে অবস্থান 1 থেকে bigArr। আপনি ব্যবহারকারীদের সর্বদা endপ্যারামিটার হিসাবে নেতিবাচক সংখ্যা দিতে বাধ্য করছেন । যে কোনও end >= -1যখন একই ফলাফল দেয় end === undefined। অন্যদিকে, bigArr.slice(1,3)রিটার্ন ['b','c'], যা আবার প্রত্যাশিত।
ডেমোনেক্সমাচিনা

5

const array_one = [11, 22, 33, 44, 55];
const start = 1;
const end = array_one.length - 1;
const array_2 = array_one.slice(start, end);
console.log(array_2);


এটি এখানে সংশোধন করে না: var অ্যারে_োন = [11, 22, 33, 44,55]; var ar2 = অ্যারে_এোন.স্লাইস (0, অ্যারে_আপনি দৈর্ঘ্য -১); কনসোল.লগ (আর 2)
বোর্মাট

0

প্রশ্ন আসলে একটি চাইছে নতুন অ্যারে , তাই আমি বিশ্বাস করি ভাল সমাধান একত্রিত করতে হবে Abdennour TOUMI এর উত্তর ক্লোন ফাংশন:

function clone(obj) {
  if (null == obj || "object" != typeof obj) return obj;
  const copy = obj.constructor();
  for (const attr in obj) {
    if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr];
  }
  return copy;
}

// With the `clone()` function, you can now do the following:

Array.prototype.subarray = function(start, end) {
  if (!end) {
    end = this.length;
  } 
  const newArray = clone(this);
  return newArray.slice(start, end);
};

// Without a copy you will lose your original array.

// **Example:**

const array = [1, 2, 3, 4, 5];
console.log(array.subarray(2)); // print the subarray [3, 4, 5, subarray: function]

console.log(array); // print the original array [1, 2, 3, 4, 5, subarray: function]

[ http://stackoverflow.com/questions/728360/most-elegant-way-to-clone-a- জাভাস্ক্রিপ্ট- অবজেক্ট]


9
আমি ভাবি না যে স্লাইসটি মূল অ্যারে পরিবর্তন করবে।
মণি

10
Array.prototype.sliceইতিমধ্যে একটি অনুলিপি প্রদান করে। Array.prototype.spliceমূল অ্যারে পরিবর্তন করে।
গুইডো বোম্যান

2
স্লাইস () পদ্ধতিটি অ্যারের কোনও অংশের একটি অগভীর অনুলিপি একটি নতুন অ্যারে অবজেক্টে ফেরত দেয়। দেখুন মজিলা ডেভেলপার নেটওয়ার্ক । Downvoted।
TheCrazyProgrammer

অন্যরা যেমন বলেছে, sliceইতিমধ্যে একটি অগভীর অনুলিপি প্রদান করে, এই subarrayপ্রয়োগটি অপ্রয়োজনীয় করে তোলে। তবে এটি উল্লেখ করারও দরকার যে আপনি একটি বিল্টিন অবজেক্টটি বানরকে প্যাচ করেছেন, এটি একটি বড় সংখ্যা। আবডেনর টুমির উত্তর সম্পর্কে মন্তব্যগুলি দেখুন ।
ডেমোনেক্সমাছিনা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.