সূচক / কী সহ… এর জন্য টাইপস্ক্রিপ্ট?


146

এখানে বর্ণিত হিসাবে টাইপস্ক্রিপ্ট একটি ফোরচ লুপের পরিচয় দেয়:

var someArray = [9, 2, 5];
for (var item of someArray) {
    console.log(item); // 9,2,5
}

কিন্তু কোনও সূচক / কী নেই? আমি এরকম কিছু আশা করবো:

for (var item, key of someArray) { ... }

উত্তর:


274

.forEach ইতিমধ্যে এই ক্ষমতা আছে:

const someArray = [9, 2, 5];
someArray.forEach((value, index) => {
    console.log(index); // 0, 1, 2
    console.log(value); // 9, 2, 5
});

তবে আপনি যদি এর দক্ষতা চান for...ofতবে আপনি mapসূচীতে অ্যারেটি এবং মানটি করতে পারেন :

for (const { index, value } of someArray.map((value, index) => ({ index, value }))) {
    console.log(index); // 0, 1, 2
    console.log(value); // 9, 2, 5
}

এটি কিছুটা দীর্ঘ, সুতরাং এটি পুনরায় ব্যবহারযোগ্য ফাংশনে রাখতে সহায়তা করতে পারে:

function toEntries<T>(a: T[]) {
    return a.map((value, index) => [index, value] as const);
}

for (const [index, value] of toEntries(someArray)) {
    // ..etc..
}

অপরিবর্তনীয় সংস্করণ

ES3 বা ES5 টার্গেট করার সময় এটি কাজ করবে যদি আপনি --downlevelIterationসংকলক বিকল্পটি সংকলন করেন ।

function* toEntries<T>(values: T[] | IterableIterator<T>) {
    let index = 0;
    for (const value of values) {
        yield [index, value] as const;
        index++;
    }
}

অ্যারে.প্রোটোটাইপ.এন্ট্রি () - ES6 +

আপনি যদি ES6 + পরিবেশকে টার্গেট করতে সক্ষম হন তবে আপনি আর্ণাভিওনের উত্তরে.entries() বর্ণিত পদ্ধতিটি ব্যবহার করতে পারেন ।


তবে টাইপস্ক্রিপ্ট "এর জন্য ... একটি সাধারণ" জন্য "সংকলন করে যার ইনডেক্স ভের _i আছে। সুতরাং টাইপস্ক্রিপ্ট বিকাশকারীদের পক্ষে আমাদের এটি _i ব্যবহার করা সহজ হবে। খেলার মাঠের উদাহরণটি দেখুন: bit.ly/1R9SfBR
মিক

2
@ মিক এটা লক্ষ্য উপর নির্ভর করে। ES6 এ স্থানান্তরিত করার সময় এটি তা করে না। স্থানান্তর করার সময় অতিরিক্ত কোডটির কারণ হ'ল কেবল পূর্ববর্তী সংস্করণগুলিতে কাজ করার জন্য ES6 কোডটি পাওয়া।
ডেভিড শেরেট

3
কিভাবে আপনি একটি বিরতি করতে পারেন; এই জন্য?
জোও সিলভা

এছাড়াও একটি ভাল উত্তর স্ট্যাকওভারফ্লো.com
ক্রিস্টোফার গ্রিগ

@ জোওসিলভা আপনি Array.some()যে পুনরাবৃত্তি থামাতে চান তা ব্যবহার করতে এবং মিথ্যা ফিরতে পারবেন । এটি প্রায় হিসাবে পরিষ্কার বা সুন্দর হিসাবে breakনা এটি কাজ সম্পন্ন হবে। ব্যক্তিগতভাবে আমি এটা পছন্দ করবেন না, আমি সম্ভবত অন্য কোন উপায়ে পুনরাবৃত্তির পুনরায় লিখতে চাই :) দেখতে stackoverflow.com/questions/2641347/...
Neek

36

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/entries

for (var [key, item] of someArray.entries()) { ... }

টিএস-তে এটির জন্য ES2015 লক্ষ্য করা দরকার কারণ এটির পুনরুক্তিগুলি সমর্থন করার জন্য রানটাইম প্রয়োজন , যা ES5 রানটাইমগুলি না করে। আপনি অবশ্যই ইএস 5 রানটাইমগুলিতে আউটপুট কাজ করতে বাবেলের মতো কিছু ব্যবহার করতে পারেন ।


35

"ওল্ড স্কুল জাভাস্ক্রিপ্ট" উদ্ধার করার জন্য (যারা জানেন না / কার্যকরী প্রোগ্রামিংয়ের প্রেমে আছেন)

for (let i = 0; i < someArray.length ; i++) {
  let item = someArray[i];
}

2
আমি আসলে এই উত্তরটি সবচেয়ে ভাল পছন্দ করি। প্রতিটি উপাদানের জন্য একটি সূচক তৈরি করতে অতিরিক্ত পদ্ধতি ব্যবহার না করা।
ব্লুগ্রাউন্ডগুলি

আপনাকে খুব ধন্যবাদ মুভিছ! আমরা এটি জানতাম না :)
টিএসআর

14

সংগ্রহের সাথে লেনদেন করার সময় আপনি সূচকটি অ্যাক্সেসের জন্য for..in টাইপস্ক্রিপ্ট অপারেটরটি ব্যবহার করতে পারেন ।

var test = [7,8,9];
for (var i in test) {
   console.log(i + ': ' + test[i]);
} 

আউটপুট:

 0: 7
 1: 8
 2: 9

ডেমো দেখুন


সচেতন থাকুন যে "আই" একটি স্ট্রিং যা ইন..লুপের সাথে অন্তর্নিহিত নয়। "I" দিয়ে গাণিতিক ক্রিয়াকলাপ সম্পাদনের ফলে স্ট্রিং কনকেন্টেশন হবে। (i + 1) উদাহরণস্বরূপ "01" এর সমান হবে যখন i = 0
স্টাফেন

for..inএটি আপনি প্রত্যাশার চেয়েও বেশি দিতে পারেন কারণ এতে কোনও বস্তুর উপরে ঘোষিত সমস্ত ফাংশনও অন্তর্ভুক্ত রয়েছে। উদাহরণস্বরূপ:for (var prop in window.document) { console.log(prop); }
কেন লিয়ন

5

বা অন্য একটি পুরানো স্কুল সমাধান:

var someArray = [9, 2, 5];
let i = 0;
for (var item of someArray) {
    console.log(item); // 9,2,5
    i++;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.