Sự khác biệt giữa hai mảng trong Typescript
Có cách nào để trả về các giá trị thiếu của list_a từ list_b trong TypeScript không?
Ví dụ:
var a1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
var a2 = ['a', 'b', 'c', 'd', 'z'];
Giá trị kết quả là
['e', 'f', 'g'].
Câu trả lời #1
Có lẽ có nhiều cách, ví dụ như sử dụng Array.prototype.filter():
var a1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
var a2 = ['a', 'b', 'c', 'd'];
let missing = a1.filter(item => a2.indexOf(item) < 0);
console.log(missing); // ["e", "f", "g"]
(mã trong sân chơi)
Chỉnh sửa
Hàm filter chạy qua các phần tử của a1 và nó giảm nó (nhưng trong một mảng mới) thành các phần tử có trong a1 (bởi vì chúng ta đang lặp qua các phần tử của nó) và bị thiếu trong a2.
Các phần tử trong a2 mà bị thiếu trong a1 sẽ không được bao gồm trong mảng kết quả (missing) vì hàm lọc không lặp qua các phần tử của a2:
var a1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
var a2 = ['a', 'b', 'c', 'd', 'z', 'hey', 'there'];
let missing = a1.filter(item => a2.indexOf(item) < 0);
console.log(missing); // still ["e", "f", "g"]
(mã trong sân chơi)
Câu trả lời #2
Typescript chỉ cung cấp trợ giúp về thiết kế/thời gian biên dịch, nó không thêm các tính năng của JavaScript. Vì vậy, giải pháp hoạt động trong JavaScript sẽ hoạt động trong Typescript.
Có nhiều cách để giải quyết việc này, lựa chọn của tôi thường là lodash: https://lodash.com/docs#difference
_.difference(['a', 'b', 'c', 'd', 'e', 'f', 'g'],['a', 'b', 'c', 'd']);
Câu trả lời #3
Bạn chỉ có thể sử dụng phương pháp này. Với bàn lớn hơn trước.
const a1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
const a2 = ['a', 'b', 'c', 'd', 'x', 'y', 'z'];
const difference_a1 = a1.filter(x => !a2.includes(x));
const difference_a2 = a2.filter(x => !a1.includes(x));
console.log(difference_a1);
/* ["e","f","g"] */
console.log(difference_a2);
/* ["x","y","z"] */