কাজগুলির জাভাস্ক্রিপ্ট অ্যারে


129
var array_of_functions = [
    first_function('a string'),
    second_function('a string'),
    third_function('a string'),
    forth_function('a string')
]

array_of_functions[0];

এটি ইচ্ছাকৃতভাবে কাজ করে না কারণ অ্যারে তৈরির সময় অ্যারেতে প্রতিটি ফাংশন কার্যকর করা হয়।

অ্যারেতে কোনও ক্রিয়াকলাপ সম্পাদন করার সঠিক উপায় কী:

array_of_functions[0];  // or, array_of_functions[1] etc.

ধন্যবাদ!


1
কি 'a string'সময় অ্যারের জনবহুল এ পরিচিতি লাভ করা আবশ্যক, অথবা ফাংশনের আহ্বানকারী এটা পাস করতে পারেন?
ক্রিসেন্ট ফ্রেশ

আপনি কী সম্পাদন করতে চাইছেন সে সম্পর্কে আমি আরও বিশদ পেতে চাই, কারণ এটি পরিচালনা করার আরও ভাল উপায় হতে পারে।
জেফ

2
"ফাংশনগুলির অ্যারে" - বা আমরা যেমন পদ্ধতিগুলির সাথে এটি একটি বস্তু হিসাবে বলতে চাই
সিমকিয়ান

আপনি কি আরও বিশদ দেওয়ার কথা ভাবেন না? এটি হ্যান্ডেল করার আরও ভাল উপায় আর হতে পারে ..
IcyFlame

উত্তর:


234
var array_of_functions = [
    first_function,
    second_function,
    third_function,
    forth_function
]

এবং তারপরে আপনি যখন অ্যারেতে প্রদত্ত ফাংশনটি সম্পাদন করতে চান:

array_of_functions[0]('a string');

16
পরামর্শ: খালি থাকলেও ()পরে রাখার কথা মনে রাখবেন array_of_functions[0]। আমি 20 মিনিটের মতো ব্যয় করেছি কেবল 'কেন এটি কাজ করে না' তা সন্ধান করতে।
হোরাসিও

মোহন মত কাজ!
মূসা এনদেদা

'ফার্স্ট ফাংশন'-এর মতো স্ট্রিংয়ের মান পাস করে আপনি কোনও ফাংশনটির সূচক কীভাবে পাবেন যাতে এটি গতিশীল হতে পারে?
ও'ডেন ব্রিসেট

106

আমি মনে করি এটিই মূল পোস্টারটি সম্পন্ন করার জন্য বোঝায়:

var array_of_functions = [
    function() { first_function('a string') },
    function() { second_function('a string') },
    function() { third_function('a string') },
    function() { fourth_function('a string') }
]

for (i = 0; i < array_of_functions.length; i++) {
    array_of_functions[i]();
}

আশা করি এটি অন্যকে সহায়তা করবে (আমার মত 20 মিনিট আগে :-) অ্যারেতে জেএস ফাংশনগুলি কীভাবে কল করতে হবে সে সম্পর্কে কোনও ইঙ্গিত খুঁজছেন।


3
এটি কেবল আমার প্রয়োজন ছিল, কারণ এটি আমার ক্রিয়াকলাপগুলি একই পরামিতি গ্রহণ করবে না ধরে নিয়ে পরামিতি কলগুলি পরিবর্তন করতে দেয়: পি
জেম

24

আপনি কী অর্জন করতে চাইছেন তার আরও বিশদ ছাড়াই আমরা অনুমান করছি। তবে আপনি এই জাতীয় কিছু করতে অবজেক্ট নোটেশন ব্যবহার করে পালাতে সক্ষম হতে পারেন ...

var myFuncs = {
  firstFunc: function(string) {
    // do something
  },

  secondFunc: function(string) {
    // do something
  },

  thirdFunc: function(string) {
    // do something
  }
}

এবং তাদের একজনকে কল করতে ...

myFuncs.firstFunc('a string')

1
আমি মনে করি এটি আরও বিকাশকারী হিসাবে বন্ধুত্বপূর্ণ কারণ আমাদের ফাংশনের সূচক মনে রাখার দরকার নেই। এবং এছাড়াও, যদি আমরা নির্দিষ্ট সূচকে কোনও ফাংশন চাপতে চাই তবে এটি তার পাশের সমস্ত ক্রিয়াকলাপের সূচক পরিবর্তনের কারণ ঘটায়। সুতরাং এটি আরও ভাল ব্যবহার করুন
dd619

16

বা শুধু:

var myFuncs = {
  firstFun: function(string) {
    // do something
  },

  secondFunc: function(string) {
    // do something
  },

  thirdFunc: function(string) {
    // do something
  }
}

13

আমি এখানে মূলত বর্ণিতshift() জাভাস্ক্রিপ্ট পদ্ধতি ব্যবহার করে একটি অ্যারের মধ্যে বিভিন্ন ফাংশন সম্পাদন করার সহজ উপায় পোস্ট করে এই থ্রেডটির পরিপূরক করব

  var a = function(){ console.log("this is function: a") }
  var b = function(){ console.log("this is function: b") }
  var c = function(){ console.log("this is function: c") }

  var foo = [a,b,c];

  while (foo.length){
     foo.shift().call();
  }

7

এটি মূলত একইরকম Darin Dimitrov'sতবে এটি দেখায় যে আপনি কীভাবে এটি ব্যবহার করতে পারেন তা কার্যকারিতা এবং যুক্তিগুলি তৈরি এবং সঞ্চয় করতে পারে। আমি আশা করি এটি আপনার জন্য দরকারী :)

var argsContainer = ['hello', 'you', 'there'];
var functionsContainer = [];

for (var i = 0; i < argsContainer.length; i++) {
var currentArg = argsContainer[i]; 

  functionsContainer.push(function(currentArg){
    console.log(currentArg);
  });
};

for (var i = 0; i < functionsContainer.length; i++) {
  functionsContainer[i](argsContainer[i]);
}


1
আপনার উত্তর যুক্ত করা ঠিক আছে যদিও অন্য কতজনই থাকুক না কেন। তবে এটির তুলনায় অন্যের থেকে আলাদা / ভাল কিছুর ব্যাখ্যা যোগ করা ভাল
বোডজোন

3

উপরে আমরা পুনরাবৃত্তি সহ কিছু দেখেছি। আসুন প্রতিটি ব্যবহার করে একই জিনিস করা যাক:

var funcs = [function () {
        console.log(1)
  },
  function () {
        console.log(2)
  }
];

funcs.forEach(function (func) {
  func(); // outputs  1, then 2
});
//for (i = 0; i < funcs.length; i++) funcs[i]();

1

এটা সঠিক

var array_of_functions = {
            "all": function(flag) { 
                console.log(1+flag); 
              },
                "cic": function(flag) { 
                console.log(13+flag); 
              }                     
        };

array_of_functions.all(27);
array_of_functions.cic(7);

1
আপনি কি নিশ্চিত যে আপনি এই প্রশ্নের উত্তর দিতে চেয়েছিলেন? এটি সম্পর্কিত নয়।
বার্গি

1
@ বার্গি আসলে এটি হয়। উত্তরের operaসাথে প্রতিস্থাপন করুন array_of_functionsএবং আপনি একই জিনিস পেয়েছেন। তোমার কি অবস্থা?
জেসি

@ জেসি ধন্যবাদ, এখন কোড পোস্ট করার সাথে আমার একটি ধারণা আছে, এটি আমার প্রথম প্রতিক্রিয়া।
লিওনার্দো সিয়াসিও

তবে ওপির একটি অ্যারে ছিল, যখন এটি কিছু অবজেক্ট (অদ্ভুত সম্পত্তির নাম সহ)? এবং এই উত্তরের খবরটি কী, কেবল পজকাব্রের বা রবিনকে কেন উপস্থাপন করবেন না?
বার্গি

1
ভেরিয়েবলের বিভ্রান্তিকর নাম। এটি ফাংশনগুলির একটি অ্যারে নয় তবে ক্রিয়াকলাপের একটি অবজেক্ট
ক্যারিকারজ্যাক

1

আপনি যদি গতিশীলভাবে কলব্যাকগুলি পাস করার চেষ্টা করার মতো কিছু করে থাকেন তবে আপনি কোনও একটি বিষয়কে আর্গুমেন্ট হিসাবে পাস করতে পারেন। এটি আপনাকে কোনও প্যারামিটার দিয়ে কোন ফাংশনগুলি সম্পাদন করতে চায় তার উপর আপনাকে অনেক বেশি নিয়ন্ত্রণ দেয় gives

function func_one(arg) {
    console.log(arg)
};

function func_two(arg) {
    console.log(arg+' make this different')
};

var obj = {
    callbacks: [func_one, func_two],
    params: ["something", "something else"];
};

function doSomething(obj) {
    var n = obj.counter
    for (n; n < (obj.callbacks.length - obj.len); n++) {
        obj.callbacks[n](obj.params[n]);
    }
};

obj.counter = 0;
obj.len = 0;
doSomething(obj); 

//something
//something else make this different

obj.counter = 1;
obj.len = 0;
doSomething(obj);

//something else make this different


0

হতে পারে এটি কারও সাহায্য করতে পারে।

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <script type="text/javascript">
        window.manager = {
            curHandler: 0,
            handlers  : []
        };

        manager.run = function (n) {
            this.handlers[this.curHandler](n);
        };

        manager.changeHandler = function (n) {
            if (n >= this.handlers.length || n < 0) {
                throw new Error('n must be from 0 to ' + (this.handlers.length - 1), n);
            }
            this.curHandler = n;
        };

        var a = function (n) {
            console.log("Handler a. Argument value is " + n);
        };

        var b = function (n) {
            console.log("Handler b. Argument value is " + n);
        };

        var c = function foo(n) {
            for (var i=0; i<n; i++) {
                console.log(i);
            }
        };

        manager.handlers.push(a);
        manager.handlers.push(b);
        manager.handlers.push(c);
    </script>
</head>
<body>
<input type="button" onclick="window.manager.run(2)" value="Run handler with parameter 2">
<input type="button" onclick="window.manager.run(4)" value="Run handler with parameter 4">
<p>
<div>
    <select name="featured" size="1" id="item1">
        <option value="0">First handler</option>
        <option value="1">Second handler</option>
        <option value="2">Third handler</option>
    </select>
    <input type="button" onclick="manager.changeHandler(document.getElementById('item1').value);" value="Change handler">
</div>
</p>
</body>
</html>


0

এই ক্রিয়াকলাপের অ্যারেটির সমস্যাটি "অ্যারে ফর্ম" তে নয় তবে এই ফাংশনগুলিকে যেভাবে বলা হয় ... তারপরে ... এটি চেষ্টা করুন .. একটি সাধারণ ইওল () দিয়ে ...

array_of_function = ["fx1()","fx2()","fx3()",.."fxN()"]
var zzz=[];
for (var i=0; i<array_of_function.length; i++)
     { var zzz += eval( array_of_function[i] ); }

এটি এখানে কাজ করে, যেখানে উপরের কিছু বাড়িতে কাজ করে না ... আশা করি এটি সাহায্য করবে


আপনি কী ব্যাখ্যা করতে পারেন কেন অন্যান্য উত্তরগুলি আপনার পক্ষে কার্যকর হয় না এবং কেন আপনার উত্তর দেয়? ধন্যবাদ!
ফ্যাবিও মনিকাকে

এটি কখনও আমার ত্রুটি, অপরিবর্তিত ফাংশন ফিরিয়ে দেয় বা জাভাস্ক্রিপ্ট দ্বারা এগুলিকে অবিকল ব্যাখ্যা করা যায় না ... (কেন আমি জানি না, তবে এটি আমার সমস্যার সমাধান করেছে)
কোয়েটজল


হ্যাঁ, ভয়াবহ, বরাবরের মতো, তবে শট সমাধান, এবং ব্যবহার করা খুব সহজ, যদি এটি কোনও "ইনপুট" থেকে দূরে থাকে ... এখানে এটি কেবলমাত্র একটি অভ্যন্তরীণ জাভাস্ক্রিপ্টের অসম্ভবতাকে সংক্ষিপ্তভাবে সমাধান করেছে ...
কোয়েটজল

0

ফাংশন.প্রোটোটাইপ.বাইন্ড () ব্যবহার করে

var array_of_functions = [
        first_function.bind(null,'a string'),
        second_function.bind(null,'a string'),
        third_function.bind(null,'a string'),
        forth_function.bind(null,'a string')
    ]

0

এটি সমাধান করার চেষ্টা করতে আমার অনেক সমস্যা হয়েছে ... সুস্পষ্ট চেষ্টা করেও কাজ করে নি। এটি কেবল কোনওভাবে একটি খালি ফাংশন সংযোজন করে।

array_of_functions.push(function() { first_function('a string') });

আমি এটিকে স্ট্রিংগুলির একটি অ্যারে ব্যবহার করে এবং পরে ইওল দিয়ে সমাধান করেছি:

array_of_functions.push("first_function('a string')");

for (var Func of array_of_functions) {
   eval(Func);
   }

-1

আপনি উপরে কিছু শীর্ষ উত্তর পেয়েছি। এটি এটির অন্য একটি সংস্করণ।

var dictFun = {
     FunOne: function(string) {
     console.log("first function");
  },

   FuncTwo: function(string) {
   console.log("second function");
 },

  FuncThree: function(string) {
   console.log("third function");
}

}


2
প্রশ্নটি কোনও বস্তুর জন্য নয়, ক্রিয়াকলাপের অ্যারের জন্য ছিল ।
ট্রাইঙ্কট

-4
/* PlanetGreeter */

class PlanetGreeter {
    hello   : { () : void; } [] = [];
    planet_1 : string = "World";
    planet_2 : string = "Mars";
    planet_3 : string = "Venus";
    planet_4 : string = "Uranus";
    planet_5 : string = "Pluto";
    constructor() {
        this.hello.push( () => { this.greet(this.planet_1); } );
        this.hello.push( () => { this.greet(this.planet_2); } );
        this.hello.push( () => { this.greet(this.planet_3); } );
        this.hello.push( () => { this.greet(this.planet_4); } );
        this.hello.push( () => { this.greet(this.planet_5); } );
    } 
    greet(a: string) : void { alert("Hello " + a); }
    greetRandomPlanet() : void { 
        this.hello [ Math.floor( 5 * Math.random() ) ] (); 
    } 
} 
new PlanetGreeter().greetRandomPlanet();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.