.Map () এই পরিস্থিতিতে কি করছে?


95

Chrome কনসোল ব্যবহার করা, এটি আমার ইনপুট এবং আউটপুট:

[0].map(Array);

[[0, 0, [0]]]; // output

এখানে কি হচ্ছে?

সম্পাদনা

কারণ এটি আমাকে কৌতূহলী করে তোলে কারণ কিছু

[0].map(String);

ফিরে আসবে

["0"];

এবং না

["0", "0", "String"]

34
আমি ধরে নিচ্ছি কারণ সুখী হওয়ার জন্য তাঁর সর্বদা কিছু জাভাস্ক্রিপ্ট ডাব্লুটিএফ প্রয়োজন
এনপিএস

12
ওহ, এটি কেবলমাত্র কম wtf-y বৈকল্পিক['10', '10', '10'].map(parseInt)
গ্রোনস্টাজ

4
আর একটি অদ্ভুত .map()আচরণ: stackoverflow.com/questions/14528397/… সাধারণভাবে, .map()একাধিক যুক্তি গ্রহণকারী ফাংশনগুলি ব্যবহার করার সময় আপনাকে সতর্কতা অবলম্বন করতে হবে ।
বার্মার

4
শুধু করুন[0].map(console.log)
বার্গি

4
@ জ্যাকসনকর: উত্তরের জন্য ধন্যবাদ। আমি মনে করি এটি এর আগে গিয়েছিল: আমি একটি মন্তব্য লিখেছিলাম, ব্যাখ্যা করে যে জেএস ডাব্লুটিএফ দেখে আমার খুশি হয় আমাকে প্রায়শই ভাষা ব্যবহার করতে হবে না। কেউ জিজ্ঞাসা করেছিলেন ভাষাটি পছন্দ না হলে আমি কেন জেএস প্রশ্নের দিকে নজর দেব। এনপিএস উত্তর দিয়েছিল এবং প্রথম দুটি মন্তব্য মুছে ফেলা হয়েছে। মজার বিষয় হল তাঁর মন্তব্যটি এখনও উঁচুতে রয়েছে, হ্যাঁ।
এরিক ডুমিনিল

উত্তর:


123

.map()ফাংশন কল করছে Array()তিন আর্গুমেন্ট, এরে উপাদান যা মান ফাংশন 0যে উপাদান সূচক,, এছাড়াও 0, এবং সমগ্র অ্যারের একটি রেফারেন্স।

সুতরাং এটি এটি করার মতো:

var a = [0];
var index = 0
Array(a[index], index, a);   // create array with three elements

ততক্ষণে ফিরে Array()আসা অ্যারে .map()তৈরি করা অ্যারের প্রথম উপাদান হয়ে যায় , সুতরাং আপনার [[0, 0, [0]]]ফলস্বরূপ বাসা বাঁধার অতিরিক্ত স্তর ।

আপনার সম্পাদনা সম্পর্কিত সম্পাদনা করুন: আপনি যখন বলেন [0].map(String);যে String()একই একই তিনটি যুক্তির সাহায্যে ডাকা হয় String(a[index], index, a)তবে String()ফাংশনটি প্রথম যুক্তি ব্যতীত সমস্ত উপেক্ষা করে, সেখানে Array()সমস্ত সরবরাহিত যুক্তি ব্যবহার করে।


39

প্রথমত , Arrayঅ্যারে তৈরি করতে একটি ফাংশন হিসাবে ব্যবহার করা যেতে পারে:

var arr = Array(1, 2, "Hello");

console.log(arr); // [1, 2, "Hello"]

দ্বিতীয়ত , mapতার কলব্যাকের জন্য তিনটি পরামিতি পাস করে: উপাদান, অ্যারে থেকে তার সূচক এবং অ্যারে নিজেই

সুতরাং , যেহেতু আপনার অ্যারেতে একটি উপাদান রয়েছে, রেখাটি:

[0].map(Array);

সমান:

[Array(0, 0, [0])];     // the element 0 in the original array will be mapped into Array(0, 0, [0])

6

আপনি প্রশ্ন আপডেট করার পরে। অন্যান্য উত্তরগুলি আপনাকে মানচিত্র সম্পর্কে তথ্য সরবরাহ করে

কেন অ্যারে এবং স্ট্রিং কনস্ট্রাক্টরগুলিতে দেখতে আলাদা answer

স্ট্রিং কনস্ট্রাক্টর অ্যারে নতুন অ্যারে (এলিমেন্ট 0, এলিমেন্ট 1 [, ... [[এলিমেন্টএন]]) এর সাথে 1 পরামিতি স্ট্রিং (জিনিস) গ্রহণ করেন


4
.map(Number)প্রতিটি আইটেমের মতো কিছু ফিরিয়ে দেওয়ার পরিবর্তে প্রতিটি আইটেমকে একটি সংখ্যায় রূপান্তরিত করার কারণ একই কারণ [3, 2, [4, 1, 3]]
user4642212

@ শুফক্স হ্যাঁ উত্তরটি নির্মাণকারীদের মধ্যে রয়েছে :)
ভলডিমায়ার বিলিয়াচ্যাট

4

এই কল

[0].map(Array);

আপনাকে একই ফল দেয় যেমন আপনি কিছু লিখেছেন:

[0].map(function (value, index, array) {
    return Array(value, index, array);
})

মানচিত্র ফাংশনটি তিনটি পরামিতি সহ অ্যারে ফাংশনটিকে কল করছে : উপাদানটির মান, উপাদানটির সূচক এবং পুরো অ্যারে। এই কলটি আপনাকে Array3 টি উপাদানের সাথে অ্যারে প্রদান করবে: মান (সংখ্যা 0), সূচক (সংখ্যা 0), পুরো অ্যারে ( [0])।

এবং এই নতুন অ্যারেটি মূল অ্যারেতে আবৃত রয়েছে কারণ আপনি মূল উপাদানটিকে (সংখ্যা 0) নতুন উপাদানকে ম্যাপ করেছেন (3 টি উপাদানের অ্যারে)

দ্রষ্টব্য: আপনি কেবল প্রথম প্যারামিটার ব্যবহার করতে অভ্যস্ত হতে পারেন

array.map(function (a) { return a * a; });

বা সূচক পেতে মাত্র দুটি ব্যবহার করে

array.map(function (item, index) { return "index=" + index + ", value=" + item; });

তবে আপনাকে মনে রাখতে হবে যে mapএখনও 3 টি পরামিতি সরবরাহ করে আপনি কেবল তাদের কলব্যাক ফাংশনে এগুলি উপেক্ষা করেন। কোডটি পছন্দ করার কারণও এটি:

[0].map(String);

প্রত্যাবর্তন

["0"]

এর কারণ স্ট্রিং ফাংশন কেবল প্রথম প্যারামিটার সম্পর্কে যত্ন করে এবং অন্যান্য উত্তীর্ণ পরামিতিগুলিকে উপেক্ষা করে। ফোন দিলে

String(11, "Some", "other", "ignored", "parameters")

আপনি এখনও পাবেন

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