Javascript Giảm một mảng trống


104

Khi tôi giảm mảng, tôi đang cố gắng lấy số 0, nhưng tôi không hiểu rõ hoạt động của hàm

[].reduce(function(previousValue, currentValue){
  return Number(previousValue) + Number(currentValue);
});

kết quả

TypeError: Reduce of empty array with no initial value

Có vẻ như nếu mảng trống, tôi không thể giảm nó

[""].reduce(function(previousValue, currentValue){
  return Number(previousValue) + Number(currentValue);
});

kết quả

""

Nếu phần tử duy nhất trong mảng là một chuỗi rỗng, hãy truy xuất một chuỗi rỗng

Câu trả lời:


226

Tham số thứ hai là giá trị ban đầu.

[].reduce(function(previousValue, currentValue){
  return Number(previousValue) + Number(currentValue);
}, 0);

hoặc sử dụng ES6:

[].reduce( (previousValue, currentValue) => previousValue + currentValue, 0);

24

Cả hai hành vi đều theo thông số kỹ thuật .

Bạn không thể reducelà một mảng trống trừ khi bạn cung cấp rõ ràng giá trị "tích lũy" ban đầu làm đối số thứ hai:

Nếu không có giá trị ban đầu nào được cung cấp, thì giá trị trước đó sẽ bằng giá trị đầu tiên trong mảng và giá trị hiện tại sẽ bằng giá trị thứ hai. Nó là TypeError nếu mảng không chứa phần tử và giá trị ban đầu không được cung cấp.

Nếu mảng có ít nhất một phần tử thì việc cung cấp giá trị ban đầu là tùy chọn. Tuy nhiên, nếu một phần tử không được cung cấp thì phần tử đầu tiên của mảng được sử dụng làm giá trị ban đầu và reducetiếp tục xử lý phần còn lại của phần tử mảng bằng cách gọi lại của bạn. Trong trường hợp của bạn, mảng chỉ chứa một phần tử duy nhất, vì vậy phần tử đó trở thành giá trị ban đầu và cũng là giá trị cuối cùng, vì không có thêm phần tử nào được xử lý thông qua lệnh gọi lại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.