Hướng dẫn how to push function into array in javascript - cách đẩy hàm vào mảng trong javascript

10

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Sử dụng JavaScript tôi cần có khả năng:

1: Đẩy một lượng nhất định của cùng một hàm (với một tham số khác nhau trong mỗi) vào một mảng.

2: Sau đó, chạy từng hàm một (cho ví dụ này chỉ là một cảnh báo về tham số/số)

3: Sau mỗi chức năng, tôi cần có khả năng tách chức năng đó ra khỏi mảng

4: Kiểm tra độ dài mảng sau mọi lúc - một khi mảng trống trở lại - cảnh báo người dùng nó đã hoàn tất

Bây giờ tôi dường như có thể thực hiện nhiệm vụ 1,2 và 4 nhưng tôi đang tìm cách tách chức năng từ mảng sau khi nó chạy - có ai có thể giúp đỡ không? Vì tôi không thể xóa chức năng, tôi không bao giờ nhận được cảnh báo 'hoàn thành' sau khi tất cả các chức năng được gọi

Mã JavaScript của tôi cho đến nay là:

// Create empty array
var array = [];

// Push functions into array - dynamic amount and could be any amount of functions
array.push(func(1));
array.push(func(2));
array.push(func(3));

// Call array manager function after pushing array
arrayManager();

// Array manager function to splice and detect when finished
function arrayManager() {
    if (array.length < 1) {
        alert("done");
    }
    else {
    //////////////////////////////////
    // << THIS IS WHERE I DON'T KNOW HOW TO SPLICE THE ITEM FROM THE ARRAY
    //////////////////////////////////
    }
}

// Function for array objects - alert passed parameter
function func(num){
    alert(num);
}

Hướng dẫn how to push function into array in javascript - cách đẩy hàm vào mảng trong javascript

Scottt

6.84825 huy hiệu bạc36 Huy hiệu đồng25 silver badges36 bronze badges

Hỏi ngày 24 tháng 9 năm 2012 lúc 19:40Sep 24, 2012 at 19:40

5

Trước hết, bạn không đẩy các chức năng vào mảng vào lúc này, thay vào đó, bạn thực hiện các hàm. Để đạt được sự thúc đẩy của bạn sẽ trông như thế này:

// Function for array objects - alert passed parameter
function func(num){
  return function(){
    alert(num);
  }
}

Bây giờ nếu các chức năng của bạn đồng bộ, bạn có thể lặp lại trên mảng

for(var i in arr){
  arr[i]();
}
console.log('done');

Nếu chúng ta đang xử lý các chức năng không đồng bộ thì họ cần phải có một cuộc gọi lại:

// Function for array objects - alert passed parameter
function func(num){
  return function(callback){
    alert(num);
    callback();
  }
}

Và sau đó bạn có thể sử dụng một bộ đếm để chạy song song.

var count = arr.length;
for(var i in arr){
  arr[i](function(){
    if(--count === 0){
      console.log('Done');
    }
  });
}

Hoặc theo trình tự:

function run(){
  var fn = arr.shift();
  if(!fn){
    console.log('Done');
  } else {
    fn(run);
  }
}
run();

Đã trả lời ngày 24 tháng 9 năm 2012 lúc 20:09Sep 24, 2012 at 20:09

Deadalreadydeadal đã sẵn sàngDeadAlready

2.90818 Huy hiệu bạc17 Huy hiệu đồng18 silver badges17 bronze badges

1

Điều này sẽ làm những gì bạn đang tìm kiếm:

var next_func = array.splice(0, 1)[0]

"Splice" mất ít nhất hai tham số: thứ nhất là chỉ mục bắt đầu loại bỏ và thứ hai là số lượng mục để xóa. Khi nó trả về một mảng mới, để chỉ nhận được chức năng, bạn sẽ nhận được giá trị đầu tiên từ mối nối. Bạn cũng có thể thêm bao nhiêu giá trị như bạn muốn sau hai tham số đầu tiên này; Chúng sẽ được thêm vào mảng thay cho những gì bạn đã xóa.

Tuy nhiên, tôi tò mò về lý do tại sao bạn đang làm theo cách này - trong khi tôi có thể hiểu việc làm điều gì đó một cách độc đáo như một bài tập trí tuệ, nếu bạn chưa quen với lập trình, tôi sẽ nói rằng có một cách tốt hơn để làm điều này. Không có nhu cầu cụ thể để xóa các mục khỏi mảng khi bạn sử dụng các chức năng từ nó. Đối với tôi, sẽ có ý nghĩa hơn khi thực thi từng hàm từ mảng, sau đó đặt "mảng = []" sau khi hoàn thành vòng lặp. Tuy nhiên, tùy thuộc vào hoàn cảnh, đây vẫn có thể là cách tốt nhất để làm những gì bạn đang làm, tôi chỉ hình dung tôi sẽ cho một số thực phẩm để suy nghĩ.

Đã trả lời ngày 24 tháng 9 năm 2012 lúc 19:47Sep 24, 2012 at 19:47

BubbledbubbleBubbles

3.7851 Huy hiệu vàng23 Huy hiệu bạc25 Huy hiệu Đồng1 gold badge23 silver badges25 bronze badges

2

// Create empty array
var array = [];

// Push functions into array - dynamic amount and could be any amount of functions
array.push(function() { func(1); });
//if you call array.push(func(1)) the function is executed immediatly
//then null is stored in the array
array.push(function() { func(2); });
array.push(function() { func(3); });

// Call array manager function after pushing array
arrayManager();

// Array manager function to splice and detect when finished
function arrayManager() {
    while (array.length){
        var fnc=array.splice(0,1)[0]
        fnc();
    }
    alert ("done");            
}

// Function for array objects - alert passed parameter
function func(num){
    alert(num);
}​

Đã trả lời ngày 24 tháng 9 năm 2012 lúc 20:09Sep 24, 2012 at 20:09

Deadalreadydeadal đã sẵn sàng

1: Đẩy một lượng nhất định của cùng một hàm (với một tham số khác nhau trong mỗi) vào một mảng.

function func(num){
    alert(num);
}

var k = [];
k.push({f:func, params:[1]});
k.push({f:func, params:[2]});
k.push({f:func, params:[3]});

2: Sau đó, chạy từng hàm một (cho ví dụ này chỉ là một cảnh báo về tham số/số)

3: Sau mỗi chức năng, tôi cần có khả năng tách chức năng đó ra khỏi mảng

4: Kiểm tra độ dài mảng sau mọi lúc - một khi mảng trống trở lại - cảnh báo người dùng nó đã hoàn tất

while (k.length > 0) {
 k[0].f(k[0].params);
 k.shift();
}
alert("done");

Đã trả lời ngày 24 tháng 9 năm 2012 lúc 20:09Sep 24, 2012 at 20:09

Deadalreadydeadal đã sẵn sàngprashanth

2.90818 Huy hiệu bạc17 Huy hiệu đồng12 silver badges13 bronze badges

http://jsfiddle.net/nZ459/1/

Điều này sẽ làm những gì bạn đang tìm kiếm:

// Function for array objects - alert passed parameter
function func(num){
  return function(){
    alert(num);
  }
}
0

"Splice" mất ít nhất hai tham số: thứ nhất là chỉ mục bắt đầu loại bỏ và thứ hai là số lượng mục để xóa. Khi nó trả về một mảng mới, để chỉ nhận được chức năng, bạn sẽ nhận được giá trị đầu tiên từ mối nối. Bạn cũng có thể thêm bao nhiêu giá trị như bạn muốn sau hai tham số đầu tiên này; Chúng sẽ được thêm vào mảng thay cho những gì bạn đã xóa.

Tuy nhiên, tôi tò mò về lý do tại sao bạn đang làm theo cách này - trong khi tôi có thể hiểu việc làm điều gì đó một cách độc đáo như một bài tập trí tuệ, nếu bạn chưa quen với lập trình, tôi sẽ nói rằng có một cách tốt hơn để làm điều này. Không có nhu cầu cụ thể để xóa các mục khỏi mảng khi bạn sử dụng các chức năng từ nó. Đối với tôi, sẽ có ý nghĩa hơn khi thực thi từng hàm từ mảng, sau đó đặt "mảng = []" sau khi hoàn thành vòng lặp. Tuy nhiên, tùy thuộc vào hoàn cảnh, đây vẫn có thể là cách tốt nhất để làm những gì bạn đang làm, tôi chỉ hình dung tôi sẽ cho một số thực phẩm để suy nghĩ.

// Function for array objects - alert passed parameter
function func(num){
  return function(){
    alert(num);
  }
}
1

Đã trả lời ngày 24 tháng 9 năm 2012 lúc 19:47Sep 24, 2012 at 20:16

Hướng dẫn how to push function into array in javascript - cách đẩy hàm vào mảng trong javascript

BubbledbubbleShmiddty

3.7851 Huy hiệu vàng23 Huy hiệu bạc25 Huy hiệu Đồng1 gold badge34 silver badges52 bronze badges

Bạn có thể đẩy một hàm vào một mảng trong javascript không?

Đôi khi bạn cần nối một hoặc nhiều giá trị mới ở cuối một mảng.Trong tình huống này, phương thức PUSH () là những gì bạn cần.Phương pháp này chấp nhận một số lượng đối số không giới hạn và bạn có thể thêm nhiều yếu tố như bạn muốn ở cuối mảng.Phương thức Push () cũng trả về độ dài mới của mảng.the push() method is what you need. This method accepts an unlimited number of arguments, and you can add as many elements as you want at the end of the array. The push() method also returns the new length of the array.

Bạn có thể đẩy một chức năng vào một mảng không?

Phương thức Push () thêm một hoặc nhiều phần tử vào đầu của một mảng.Mảng.Hàm Push () Trả về độ dài mới của mảng được hình thành.. The array. push() function returns the new length of the Array formed.

Làm thế nào để bạn đẩy mọi thứ vào một mảng?

Để đẩy một đối tượng vào một mảng, hãy gọi phương thức push (), chuyển nó là một đối tượng dưới dạng tham số.Ví dụ, mảng.Đẩy ({name: 'tom'}) đẩy đối tượng vào mảng.Phương thức đẩy thêm một hoặc nhiều phần tử vào cuối mảng.call the push() method, passing it the object as a parameter. For example, arr. push({name: 'Tom'}) pushes the object into the array. The push method adds one or more elements to the end of the array.