কফিস্ক্রিপ্টে কোনও অবজেক্টে কী এবং মানগুলি কীভাবে পুনরায় করা যায়?


189

আমার কাছে একটি অবজেক্ট রয়েছে (একটি "সহযোগী অ্যারে" তাই বলার জন্য - এটি একটি সরল জাভাস্ক্রিপ্ট অবজেক্ট হিসাবে পরিচিত):

obj = {}
obj["Foo"] = "Bar"
obj["bar"] = "Foo"

আমি নীচে objকফি স্ক্রিপ্ট ব্যবহার করে পুনরাবৃত্তি করতে চাই :

# CS
for elem in obj

উপরের সিএস কোডটি জেএসকে সংকলন করুন:

// JS
for (i = 0, len = obj.length; i < len; i++)

যা এই ক্ষেত্রে উপযুক্ত নয়।


জাভাস্ক্রিপ্ট উপায় হ'ল for(var key in obj)তবে এখন আমি ভাবছি: কফি স্ক্রিপ্টে আমি এটি কীভাবে করব?


4
জাভাস্ক্রিপ্ট / কফিস্ক্রিপ্টের "অ্যারে" হ'ল সংখ্যাসূচক সূচকযুক্ত একটি বিশেষ বস্তু এবং এমন একটি lengthসম্পত্তি যা কেবলমাত্র সর্বাধিক সংখ্যাসূচক সূচককে বোঝায় (প্লাস 1)। কি চাও শুধু একটি "বস্তু" is: obj = {}। অ্যারেগুলি অবজেক্টস তবে আপনার উদাহরণে এটি ব্যবহার করার কোনও কারণ নেই।
ট্রেভর বার্নহ্যাম

1
গুড পয়েন্ট ট্রেভর! আমি এই বিষয়ে প্রশ্নটি কিছুটা বিভ্রান্তিকর / বিভ্রান্তিকর হতে সংশোধন করেছি।
প্রতি লন্ডবার্গ

উত্তর:


350

ব্যবহার for x,y of Lপ্রাসঙ্গিক ডকুমেন্টেশন

ages = {}
ages["jim"] = 12
ages["john"] = 7

for k,v of ages
  console.log k + " is " + v

আউটপুট

jim is 12
john is 7

আপনি for own k,v of agesমন্তব্যগুলিতে অ্যারন ডুফর দ্বারা বর্ণিত রূপটি বিবেচনা করতেও পারেন । এটি প্রোটোটাইপ থেকে উত্তরাধিকার সূত্রে প্রাপ্ত সম্পত্তিগুলি বাদ দেওয়ার জন্য একটি চেক যুক্ত করে, যা সম্ভবত এই উদাহরণে কোনও সমস্যা নয় তবে আপনি যদি অন্য সামগ্রীর শীর্ষে তৈরি করে থাকেন তবে তাও হতে পারে।


12
অবিকল। কফিস্ক্রিপ্ট ofজাভাস্ক্রিপ্ট এর সংকলন in। এটি বিভ্রান্তির একটি সাধারণ বিষয়, তবে inঅ্যারে ব্যবহারের জন্য থাকা অবিশ্বাস্যভাবে কার্যকর। আমি কফিস্ক্রিপ্ট বইয়ের দৈর্ঘ্যে এ সম্পর্কে কথা বলি ।
ট্রেভর বার্নহ্যাম

3
আপনার arrযেমন arr = []ব্যবহার করা উচিত তেমন আরম্ভ করা উচিত নয় arr = {}। জাভাস্ক্রিপ্ট (এবং Coffeescript) অ্যারে সংখ্যাসূচক সূচক আছে। বস্তুগুলি সহযোগী অ্যারে / ডিক্টের মতো আচরণ করে।
মরগান হ্যারিস

ধন্যবাদ, এটি ইতিমধ্যে ট্রেভর এবং অন্যরা দ্বারা চিহ্নিত করা হয়েছে, এবং আমার উত্তরটি মূল প্রশ্ন কোডটি রেখেছিল। আমি যাই হোক না কেন স্বচ্ছতার জন্য একটি সরল অবজেক্টটি ব্যবহার করতে আমার উদাহরণ আপডেট করব।
নিক

13
যদিও এই বিশেষ উদাহরণটির জন্য এটি গুরুত্বপূর্ণ নয়, এটি মনে হচ্ছে for own key, value of objওপি যা খুঁজছে তার কাছাকাছি।
অ্যারন ডুফর

4

আপনি একটি অ্যারে শুরু করছেন, তবে তারপরে আপনি এটি কোনও অবজেক্টের মতো ব্যবহার করছেন (জেএস-তে কোনও "সাহসী অ্যারে" নেই)।

বস্তুর উপর পুনরাবৃত্তির জন্য বাক্য গঠন (যেমন কিছু):

for key, val of arr
  console.log key + ': ' + val 

3
প্রকৃতপক্ষে, জেএসের সমস্ত অবজেক্টগুলি এসোসিয়েটিভ অ্যারে (সংগত ধারাবাহিক কী অর্ডারিং)। সুতরাং কোড jcmoney কাজ করা উচিত, সেখানে ব্যবহার করার কোনও কারণ যদিও দিলেন []পরিবর্তে {}যে ক্ষেত্রে।
ট্রেভর বার্নহ্যাম

jashkenas.github.com/c کافی-script/# লুপগুলি দেখে মনে হচ্ছে কফিস্ক্রিপ্ট দ্বারা উত্পন্ন লুপটি বস্তুর সদস্যদের দ্বারা পুনরাবৃত্তি করবে না।
কিওওপি

3

অ্যারে বোঝাপড়া ব্যবহার করে সংক্ষিপ্ত হাতের সংস্করণ, যা এক-লাইন লুপ হিসাবে ব্যবহার করা যেতে পারে।

console.log index + ": " + elm for index, elm of array

অ্যারে বোধগম্যতা হ'ল:

"Reচ্ছিক রক্ষাকারী ধারা এবং বর্তমান অ্যারে সূচকের মান সহ লুপগুলির জন্য সমঝোতাগুলি (এবং সংকলন) প্রতিস্থাপন করে lo #loops


5
দয়া করে ব্যাখ্যা করুন. কেবল একটি কোড স্নিপেট সরবরাহ করা যথেষ্ট নয়। স্ট্যাকওভারফ্লো কোনও "জিমে কোডজ" সাইট নয়, ধারণাটি এই যে, উত্তরটি যদি বিমূর্ত ধারণাটির ব্যাখ্যা সরবরাহ করে তবে অন্যরা আরও বেশি উপকৃত হবে।
এলিরান মালকা

1

আপনার কনভেনশন সহ, অ্যারেরটি একটি অ্যারে, তবে "ফু" এই অ্যারের বৈশিষ্ট্য, এটি কোনও সূচকযুক্ত মান নয়। আপনি যদি কোনও অ্যারের সূচকযুক্ত মানগুলি আপনার ডেটা সঞ্চয় করতে চান তবে আপনার লেখা উচিত ছিল:

arr1 = []
arr1[0] = "Bar"
arr1[1] = "Foo"

অথবা আপনি যদি কোনও সহযোগী অ্যারে চান তবে কেবল একটি অবজেক্ট ব্যবহার করুন:

arr2 = {}
arr2["Foo"] = "Bar" // equivalent to arr2.foo="Bar"
arr2["bar"] = "Foo" // equivalent to arr2.bar="Foo"

আপনি যদি এআর 1 এ লুপ করতে চান:

str = "values are : "
for val in arr2
  str += val + " |"
console.log key + ': ' + val

ফেরত:

values are : Bar | Foo |

এবং অ্যারে 2 লুপ করতে: "অ্যারের মান জন্য"

for key, val of arr
  console.log key + ': ' + val

যা প্রত্যাবর্তন করে:

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