জাভাস্ক্রিপ্টে পুনরাবৃত্তি (কীগুলি, মানগুলি) কীভাবে করবেন?


335

আমার একটি অভিধান রয়েছে যার বিন্যাসটি রয়েছে

dictionary = {0: {object}, 1:{object}, 2:{object}}

এই অভিধানের মাধ্যমে আমি কীভাবে এমন কিছু করে পুনরাবৃত্তি করতে পারি

for((key,value) in dictionary){
  //Do stuff where key would be 0 and value would be the object
}

3
for (let [key, value] of Object.entries(obj)), বাবেল দরকার।
এলকাররা


1
@ এলক্লান্সার ইট ইএস ২০১6 এ এবং এটি এখনও মানসম্মত হয়নি :-)
thefourtheye


@ ডুগাইন, এটি এই প্রশ্নের কোন অ্যারে নয়।
zangw

উত্তর:


479

TL; ড

  1. ECMAScript 5 এ, এটি সম্ভব নয়।
  2. ECMAScript 2015 এ এটি Mapএস এর মাধ্যমে সম্ভব ।
  3. ECMAScript 2017 এ এটি সহজেই উপলব্ধ হবে।

ECMAScript 5:

না, এটি বস্তুর দ্বারা সম্ভব নয়।

আপনার হয় হয় পুনরাবৃত্তি করা উচিত for..in, বা Object.keys, এই মত

for (var key in dictionary) {
    // check if the property/key is defined in the object itself, not in parent
    if (dictionary.hasOwnProperty(key)) {           
        console.log(key, dictionary[key]);
    }
}

নোট:if শর্ত সর্বোপরি, প্রয়োজনীয় শুধুমাত্র আপনি পুনরুক্তি করতে বৈশিষ্ট্য যা চান dictionaryবস্তুর নিজস্ব নয়। কারণ for..inউত্তরাধিকারসূত্রে প্রাপ্ত সমস্ত অগণিত বৈশিষ্ট্য পুনরুক্ত করা হবে।

অথবা

Object.keys(dictionary).forEach(function(key) {
    console.log(key, dictionary[key]);
});

ECMAScript 2015

ECMAScript 2015 এ, আপনি Mapঅবজেক্টগুলি ব্যবহার করতে পারেন এবং সেগুলি দিয়ে পুনরাবৃত্তি করতে পারেন Map.prototype.entries। এই পৃষ্ঠা থেকে উদাহরণ উদ্ধৃত,

var myMap = new Map();
myMap.set("0", "foo");
myMap.set(1, "bar");
myMap.set({}, "baz");

var mapIter = myMap.entries();

console.log(mapIter.next().value); // ["0", "foo"]
console.log(mapIter.next().value); // [1, "bar"]
console.log(mapIter.next().value); // [Object, "baz"]

অথবা বারবার সঙ্গে for..of, ভালো

'use strict';

var myMap = new Map();
myMap.set("0", "foo");
myMap.set(1, "bar");
myMap.set({}, "baz");

for (const entry of myMap.entries()) {
  console.log(entry);
}

আউটপুট

[ '0', 'foo' ]
[ 1, 'bar' ]
[ {}, 'baz' ]

অথবা

for (const [key, value] of myMap.entries()) {
  console.log(key, value);
}

আউটপুট

0 foo
1 bar
{} baz

ECMAScript 2017

ECMAScript 2017 একটি নতুন ফাংশন প্রবর্তন করবে Object.entries। আপনি যেমনটি চেয়েছিলেন তেমন পুনরুক্তি করতে এটি ব্যবহার করতে পারেন।

'use strict';

const object = {'a': 1, 'b': 2, 'c' : 3};
for (const [key, value] of Object.entries(object)) {
  console.log(key, value);
}

আউটপুট

a 1
b 2
c 3

1
একটি প্রাথমিক সন্দেহ। নোড.জেএস-এ এটি কীভাবে করা যায় তা সন্ধান করার জন্য আমি এখানে অবতরণ করেছি, যা সার্ভারের পাশে জাভাস্ক্রিপ্ট। আমার ক্ষেত্রে কোন ES সংস্করণটি প্রযোজ্য তা আমি কীভাবে জানতে পারি। এছাড়াও, নিয়মিত জাভাস্ক্রিপ্ট ব্যবহারকারীদের ক্ষেত্রে, আমি বুঝতে পারি যে ES সংস্করণ ক্লায়েন্টের ব্রাউজারের উপর নির্ভর করে?
সন্দীপন নাথ

2
@ সন্দ্বীপনাথ আপনার নোড.জেএস- তে কোনও নির্দিষ্ট ইএস বৈশিষ্ট্য সমর্থন করে কিনা তা জানতে আপনি নোড.green এর মতো ওয়েবসাইটগুলি ব্যবহার করতে পারেন । যতদূর ব্রাউজারগুলি সম্পর্কিত, লোকেরা সাধারণত সেই সংস্করণটিকে লক্ষ্য করে যা ব্যাপকভাবে সমর্থিত হয়, এই ক্ষেত্রে, ES5। এগুলি ছাড়াও, ট্রান্সপোর্টারগুলি ( বাবেলের মতো ) ES2015 + কোডকে ES5 তে রূপান্তর করতে সহায়তা করে।
thefourtheye 29:58

1
আমি Object.keys(dictionary).forEach(function(key) {…খুব পঠনযোগ্য এবং সামঞ্জস্যপূর্ণ পছন্দ করি।
ctrl-alt-delor

5
Object.entries(object).forEach(([key, val]) => {...});
ক্রিমসন


60

এটা চেষ্টা কর:

dict = {0:{1:'a'}, 1:{2:'b'}, 2:{3:'c'}}
for (var key in dict){
  console.log( key, dict[key] );
}

0 Object { 1="a"}
1 Object { 2="b"}
2 Object { 3="c"}

42

Object.entries()পদ্ধতি ES2017 উল্লেখিত হয়েছে (এবং করা হয় সব আধুনিক ব্রাউজারে সমর্থিত ):

for (const [ key, value ] of Object.entries(dictionary)) {
    // do something with `key` and `value`
}

ব্যাখ্যা:

  • Object.entries()মত একটি বস্তু লাগে { a: 1, b: 2, c: 3 }এবং এটি কী-মান যুগলের একটি অ্যারের মধ্যে সক্রিয়: [ [ 'a', 1 ], [ 'b', 2 ], [ 'c', 3 ] ]

  • সঙ্গে for ... ofআমরা তাই নির্মিত অ্যারের এন্ট্রি উপর লুপ পারেন।

  • যেহেতু আমরা হয় নিশ্চিত যাতে iterated অ্যারের আইটেম প্রতিটি নিজেই দুই এন্ট্রি অ্যারে, আমরা ব্যবহার করতে পারেন ডেসট্রাকচারিং সরাসরি বরাদ্দ ভেরিয়েবল keyএবং valueতার প্রথম ও দ্বিতীয় আইটেমে।


দুঃখজনক বিষয় হ'ল লোকেরা এখনও ইন্টারনেট এক্সপ্লোরার ব্যবহার করে
এডওয়ার্ড

আমি বেদনাদায়ক সচেতন। বাবেল এবং পলিফিল.আইও এটি সমাধান করে তবে এটি উপভোগযোগ্য।
লোইলো

19

আপনি এর মতো কিছু করতে পারেন:

dictionary = {'ab': {object}, 'cd':{object}, 'ef':{object}}
var keys = Object.keys(dictionary);

for(var i = 0; i < keys.length;i++){
   //keys[i] for key
   //dictionary[keys[i]] for the value
}

3
সুন্দর! আমি পছন্দ করি যে গ্রহণযোগ্য এবং সর্বাধিক উত্সাহিত উত্তর থাকা সত্ত্বেও এটি সম্ভব নয় তবুও আপনার উত্তর কীভাবে ECMAscript 5 এ কাজ করে। আপনি আরও অনেক কিছু উপার্জনের প্রাপ্য।
লিলজোশু

18

এটা চেষ্টা কর:

var value;
for (var key in dictionary) {
    value = dictionary[key];
    // your code here...
}

9

2020 এ স্বাগতম * ইএস 6 * এ ড্রলগুলি

এখানে বেশ কয়েকটি পুরানো উত্তর রয়েছে - ধ্বংস করার সুবিধা নিন। আমার মতে এটি কোনও সন্দেহ ছাড়াই কোনও বস্তুর পুনরাবৃত্তি করার উত্তম (খুব পাঠযোগ্য) উপায়।

Object.entries(myObject).forEach(([k,v]) => {
    console.log("The key: ",k)
    console.log("The value: ",v)
})

কেবলমাত্র একটি দ্রষ্টব্য: আপনি যদি উপরের forEachসাথে প্রতিস্থাপন করেন mapতবে মানগুলি একীভূত করা সম্ভব। mapএরপরে বলা মানগুলির একটি তালিকা ফিরিয়ে দেবে, এইভাবে কোডটি অন্য উপায়ে সহজ করে।
Lazerbeak12345

4

আমি মনে করি দ্রুত এবং সহজ উপায়

Object.entries(event).forEach(k => {
    console.log("properties ... ", k[0], k[1]); });

কেবলমাত্র ডকুমেন্টেশন https://developer.mozilla.org/en-US/docs/Web/ জাভা স্ক্রিপ্ট / রেফারেন্স / গ্লোবাল_অবজেক্টস / অবজেক্ট / এন্ট্রি পরীক্ষা করুন


2
আরও ভাল: অবজেক্ট.এন্ট্রি (আপত্তি)। forEach (([কী, মান]) => so কনসোল.লগ ( ${key} ${value});});
হানি

1

swagger-ui.js ব্যবহার করে

তুমি এটি করতে পারো -

_.forEach({ 'a': 1, 'b': 2 }, function(n, key) {
    console.log(n, key);
 });

0

আপনি স্ক্রিপ্ট নীচে ব্যবহার করতে পারেন।

var obj={1:"a",2:"b",c:"3"};
for (var x=Object.keys(obj),i=0;i<x.length,key=x[i],value=obj[key];i++){
    console.log(key,value);
}

আউটপুট
1 এ
2 বি
সি 3


# উইল আউটপুট # সি 3 # 1 এ # 2 বি
মাইকেল পাইপার

4
আপনার উত্তরে ব্যাখ্যা যুক্ত করার বিষয়ে বিবেচনা করুন, একা কোডটি কম সহায়ক is এছাড়াও, আপনি নিজের উত্তরটি সম্পাদনা করতে পারবেন, মন্তব্যগুলি যেভাবে আপনি সেগুলি ব্যবহার করছেন সেভাবে উত্তরটির সম্প্রসারণ হিসাবে বোঝানো হচ্ছে না
ভিক্টর

0

গৃহীত উত্তরের উন্নতি হিসাবে, বাসা বাঁধাকে হ্রাস করার জন্য, আপনি যদি পরিবর্তে কীটি উত্তরাধিকার সূত্রে না পান তবে আপনি এটি করতে পারেন:

for (var key in dictionary) {
    if (!dictionary.hasOwnProperty(key)) {
        continue;
    }
    console.log(key, dictionary[key]);
}

সম্পাদনা করুন: এখানে সম্পর্কে তথ্যObject.hasOwnProperty

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