TypeScript và hàm reduce của mảng
Bạn có biết phương thức mảng reduce trong TypeScript làm gì không? Bạn có thể cung cấp một ví dụ đơn giản về cách sử dụng không?
Tôi đã tìm trên Google và tài liệu hướng dẫn ngôn ngữ TypeScript nhưng không tìm thấy bất kỳ giải thích hay ví dụ nào hợp lý.
Câu trả lời #1
Chỉ là một ghi chú bổ sung cho các câu trả lời khác.
Nếu một giá trị ban đầu được cung cấp cho reduce thì đôi khi kiểu dữ liệu của nó phải được chỉ định, ví dụ:-
a.reduce(fn, [])
có thể phải
a.reduce<string[]>(fn, [])
hoặc
a.reduce(fn, <string[]>[])
Câu trả lời #2
Thực ra đó là hàm reduce của mảng JavaScript hơn là một thứ gì đó đặc biệt của TypeScript.
Như đã mô tả trong tài liệu: Áp dụng một hàm trên một bộ tích lũy và từng giá trị của mảng (từ trái sang phải) để giảm nó về một giá trị duy nhất.
Đây là một ví dụ tổng hợp các giá trị của một mảng:
let total = [0, 1, 2, 3].reduce((accumulator, currentValue) => accumulator + currentValue);
console.log(total);Đoạn mã này nên xuất ra 6.
Câu trả lời #3
Với các generic trong TypeScript, bạn có thể làm điều gì đó như thế này.
class Person {
constructor (public Name : string, public Age: number) {}
}
var list = new Array<Person>();
list.push(new Person("Baby", 1));
list.push(new Person("Toddler", 2));
list.push(new Person("Teen", 14));
list.push(new Person("Adult", 25));
var oldest_person = list.reduce( (a, b) => a.Age > b.Age ? a : b );
alert(oldest_person.Name);
Câu trả lời #4
Reduce() là..
- Phương thức reduce() giảm mảng thành một giá trị duy nhất.
- Phương thức reduce() thực thi một hàm được cung cấp cho mỗi giá trị của mảng (từ trái sang phải).
- Giá trị trả về của hàm được lưu trong một bộ tích lũy (kết quả/tổng).
Nó đã ...
let array=[1,2,3];
function sum(acc,val){ return acc+val;} // => can change to (acc,val)=>acc+val
let answer= array.reduce(sum); // answer is 6
Thay đổi thành
let array=[1,2,3];
let answer=arrays.reduce((acc,val)=>acc+val);
Bạn cũng có thể sử dụng trong
- tìm giá trị lớn nhất
let array=[5,4,19,2,7];
function findMax(acc,val)
{
if(val>acc){
acc=val;
}
}
let biggest=arrays.reduce(findMax); // 19
- tìm một phần tử không bị lặp lại.
arr = [1, 2, 5, 4, 6, 8, 9, 2, 1, 4, 5, 8, 9]
v = 0
for i in range(len(arr)):
v = v ^ arr[i]
print(value) //6
