Memahami cara kerja fungsi pengurangan()

Saya hanya memastikan bahwa saya mengetahui cara kerja fungsi ini. Saya membaca materi dan menonton video tentang fungsi pengurangan mungkin selama 3 jam tadi malam, saya tidak mengerti. Saya menjauh dari komputer, membuat makanan, menonton acara TV, lalu melihat komputer lagi dan BAM! Saya mendapatkannya. Saya tahu cara kerja fungsi pengurangan sekarang.

Saya hanya tidak tahu mengapa contoh pertama di bawah ini berhasil sedangkan contoh kedua tidak.

sumber: Javascript Eloquent Ch. 5 §Meratakan

Ini bekerja:

var arrays = [[1, 2, 3], [4, 5], [6]];

var flattened = arrays.reduce(function(a, b) {
  return a.concat(b);
});

flattened; //=>[1, 2, 3, 4, 5, 6]

Saya mencoba mengutak-atik kode, untuk mengubah variabel menjadi suatu fungsi. Dan entah bagaimana, aku memecahkannya. Di bawah ini mengembalikan undefined, dan saya tidak yakin mengapa.

Ini tidak berhasil:

var arrays = [[1, 2, 3], [4, 5], [6]];

function flattened(arr){
  arr.reduce(function(a, b) {
    return a.concat(b);
  });
}
flattened(arrays); //=> undefined

Mengapa fungsi pertama berfungsi, tetapi fungsi kedua tidak? Saya yakin itu adalah sesuatu kecil yang saya lewatkan.


person jward01    schedule 01.08.2015    source sumber


Jawaban (3)


Karena fungsi flattened tidak mengembalikan apa pun.

function flattened(arr){
  /* “return” needs to be here */ arr.reduce(function(a, b) { // No return from the outer wrapper function “flattened”
    return a.concat(b); // return from the inner function “reduce”
  });
}

Fungsi di dalamnya mengembalikan sesuatu, tetapi fungsi yang memuatnya tidak.

person Sebastian Simon    schedule 01.08.2015
comment
Ah itu masuk akal!! Terima kasih! Saya relatif baru mengenal JS, tetapi saya belajar dengan cepat. Proses sederhana, hal-hal seperti itu terkadang membuatku bingung. Terima kasih! - person jward01; 01.08.2015

Anda perlu return dari fungsi flattened.

function flattened(arr){
  return arr.reduce(function(a, b) {
    return a.concat(b);
  });
}
person Zachary Kuhn    schedule 01.08.2015
comment
Terima kasih! Jadi hanya untuk pemahaman saya... dalam contoh 'rusak' saya, saya mengembalikan concat ke fungsi pengurangan, tetapi saya tidak mengembalikan fungsi pengurangan ke fungsi rata? - person jward01; 01.08.2015
comment
@ jward01 Tidak mengembalikan hasil dari reduce/concat, bukan reduce/concat itu sendiri. - person Andrew Marshall; 01.08.2015

flattened() perlu mengembalikan nilai seperti ini:

var arrays = [[1, 2, 3], [4, 5], [6]];

function flattened(arr){
return arr.reduce(function(a, b) {
  return a.concat(b);
});
}
flattened(arrays);
person Shambhavi    schedule 01.08.2015