ES6 Iteable এ অ্যারে রূপান্তর করুন


100

বলুন আপনার কাছে একটি অ্যারের মতো জাভাস্ক্রিপ্ট ES6 রয়েছে যা আপনি যা জানেন তা আগেই দৈর্ঘ্যে সীমাবদ্ধ হবে, এটি জাভাস্ক্রিপ্ট অ্যারেতে রূপান্তর করার সর্বোত্তম উপায় কোনটি?

এটি করার কারণটি হ'ল আন্ডারস্কোর এবং লোডাশের মতো অনেক জেএস লাইব্রেরি কেবল অ্যারে সমর্থন করে, সুতরাং আপনি যদি তাদের কোনও ফাংশন কোনও আইটেবল ব্যবহার করতে চান তবে প্রথমে এটি অ্যারেতে রূপান্তর করতে হবে।

পাইথনে আপনি কেবল তালিকা () ফাংশনটি ব্যবহার করতে পারেন। ES6 এর সমতুল্য কি আছে?


উত্তর:


156

আপনি অ্যারে.ফ্রম বা স্প্রেড অপারেটর ব্যবহার করতে পারেন ।

উদাহরণ:

let x = new Set([ 1, 2, 3, 4 ]);

let y = Array.from(x);
console.log(y); // = [ 1, 2, 3, 4 ]

let z = [ ...x ];
console.log(z); // = [ 1, 2, 3, 4 ]


4
প্রায় একইটি ES6 let m = new Map()ডেটা-কাঠামোর ক্ষেত্রে প্রযোজ্য : মানচিত্রের কেবলমাত্র মান পেতে, ব্যবহার করতে Array.fromবা স্প্রেড অপারেটারে m.values(), একই জন্য m.keys()। অন্যথা, আপনি অ্যারে একটি অ্যারের পাবেন: [[key, value], [key, value]]
নিক সুমেকো

17

সারসংক্ষেপ:

  • Array.from() ফাংশন, এটি ইনপুট হিসাবে একটি পুনরাবৃত্তি গ্রহণ করে এবং পুনরাবৃত্তিযোগ্য একটি অ্যারের প্রদান করে।
  • স্প্রেড অপারেটর: ...একটি অ্যারের আক্ষরিক সাথে সংমিশ্রণে।

const map = new Map([[ 1, 'one' ],[ 2, 'two' ]]);

const newArr1  = [ ...map  ];  // create an Array literal and use the spread syntax on it
const newArr2 = Array.from( map );  // 

console.log(newArr1, newArr2); 

অ্যারে অনুলিপি করার সময় ক্যাভেট:

এই বিষয়ে সচেতন হন যে এই পদ্ধতিগুলির উপরের মাধ্যমে কেবলমাত্র একটি অগভীর অনুলিপি তৈরি করা হয় যখন আমরা কোনও অ্যারে অনুলিপি করতে চাই। একটি উদাহরণ সম্ভাব্য সমস্যাটি পরিষ্কার করবে:

let arr = [1, 2, ['a', 'b']];

let newArr = [ ...arr ];

console.log(newArr);

arr[2][0] = 'change';

console.log(newArr);

এখানে নেস্টেড অ্যারের কারণে রেফারেন্স অনুলিপি করা হয় এবং কোনও নতুন অ্যারে তৈরি হয় না। সুতরাং আমরা যদি পুরানো অ্যারের নেস্টেড অ্যারেটিকে পরিবর্তন করি তবে এই পরিবর্তনটি নতুন অ্যারেতে প্রতিফলিত হবে (কারণ তারা একই অ্যারেটির উল্লেখ করে, রেফারেন্সটি অনুলিপি করা হয়েছিল)।

সাবধানতার জন্য সমাধান:

অ্যারের ব্যবহার করে গভীর ক্লোন তৈরি করে আমরা অগভীর অনুলিপিগুলির সমস্যাটি সমাধান করতে পারি JSON.parse(JSON.stringify(array))। উদাহরণ স্বরূপ:

let arr = [1, 2, ['a', 'b']]

let newArr = Array.from(arr);

let deepCloneArr = JSON.parse(JSON.stringify(arr));

arr[2][0] = 'change';

console.log(newArr, deepCloneArr)


12

আপনি অ্যারে.ফর্ম পদ্ধতিটি ব্যবহার করতে পারেন , যা ইএস 6 এ যুক্ত হচ্ছে, তবে কেবল অ্যারে এবং মানচিত্র এবং সেটের মতো পুনরাবৃত্তযোগ্য অবজেক্টগুলিকে সমর্থন করে (এটিও এসএসে আসবে)। নিয়মিত অবজেক্টের জন্য, আপনি অ্যান্ডস্কোরের টু অ্যারে পদ্ধতি বা লড্যাশের টু অ্যারে পদ্ধতি ব্যবহার করতে পারেন , যেহেতু উভয় লাইব্রেরিতেই কেবল অ্যারে নয়, অবজেক্টগুলির জন্য দুর্দান্ত সমর্থন রয়েছে। যদি আপনি ইতিমধ্যে আন্ডারস্কোর বা লোডাশ ব্যবহার করছেন তবে ভাগ্যক্রমে তারা মানচিত্রের মতো বিভিন্ন কার্যকরী ধারণা যুক্ত করার পাশাপাশি আপনার বিষয়গুলির জন্য হ্রাস করার পাশাপাশি সমস্যাটি পরিচালনা করতে পারে।


3

নিম্নলিখিত পদ্ধতির মানচিত্রের জন্য পরীক্ষা করা হয়েছে:

const MyMap = new Map([
  ['a', 1],
  ['b', 2],
  ['c', 3]
]);

const MyArray = [...MyMap].map(item => {
  return {[item[0]]: item[1]}
});

console.info( MyArray ); //[{"a", 1}, {"b", 2}, {"c": 3}]

না কি জিজ্ঞাসা করা হল - Array.from পথ দেখতে
জোয়াও Antunes


-4

আপনি এছাড়াও করতে পারেন:

let arr = [];
for (let elem of gen(...)){
    arr.push(elem);
}

অথবা ES5 + জেনারেটর ফাংশন ব্যবহার করে "হার্ড ওয়ে" ( ফিডাল বর্তমান ফায়ারফক্সে কাজ করে):

var squares = function*(n){
    for (var i=0; i<n; i++){
        yield i*i;
    }
}

var arr = [];
var gen = squares(10);
var g;
while(true){
    g = gen.next();
    if (g.done){
        break;
    }
    arr.push(g.value);
}

উভয় পদ্ধতির অবশ্যই সুপারিশযোগ্য নয় এবং এটি কেবল একটি ধারণার প্রমাণ হিসাবে রয়েছে।

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