Trước tiên, trong đoạn mã trên, chúng tôi đang xâu chuỗi mảng1 với phương thức forEach[] trả lại cho chúng tôi từng phần tử trong mảng1 ở cuối, chúng tôi sẽ trả về chuỗi mảng thứ hai với phương thức forEach[] nó trả lại cho chúng tôi các phần tử trong mảng thứ hai, sau đó là e2 . Nếu điều gì đó đúng, chúng tôi bắt đầu nhập vào khối if
Xin chào các bạn, hôm nay tôi mang đến cho các bạn một số phép thuật ES6 cho các thuật toán Array phổ biến mà đôi khi chúng ta nghĩ quá nhiều và chúng có một giải pháp đơn giản thực sự dễ dàng bằng cách sử dụng các hàm bậc cao như bộ lọc và lý thuyết Tập hợp
Lý thuyết tập hợp là gì trên thế giới? . Chúng tôi không đề cập đến các phương thức giống nhau cho Bộ Javascript [Mảng và Bộ là các cấu trúc dữ liệu khác nhau, bạn có thể xem bài viết này để hiểu rõ hơn https. //vừa phải. com/front-end-hacking/es6-set-vs-array-what-and-when-efc055655e1a] nhưng vì Mảng là tập hợp dữ liệu đồng nhất nên sẽ có cùng nguyên tắc
Trong bài viết này, bạn sẽ học cách triển khai các tính năng này
Mã sốĐối với tất cả các ví dụ, chúng tôi có hai mảng, A
let difference = arrA.filter[x => !arrB.includes[x]];
1 & let difference = arrA.filter[x => !arrB.includes[x]];
2, chúng tôi cần một mảng thứ ba gọi là C với kết quả của hoạt động. Hãy sử dụng một số Biểu đồ Venn để giúp chúng ta hình dung các khái niệmNgã tư
Sơ đồ Venn cho giao của hai tập hợp
Phần giao nhau sẽ cho chúng ta các phần tử mà cả hai mảng có chung, trong trường hợp này, kết quả phải là
let difference = arrA.filter[x => !arrB.includes[x]];
3let intersection = arrA.filter[x => arrB.includes[x]];
Sự khác biệt
Sự khác biệt sẽ xuất ra các phần tử từ mảng A không có trong mảng B. Kết quả sẽ là
let difference = arrA.filter[x => !arrB.includes[x]];
4let difference = arrA.filter[x => !arrB.includes[x]];
Chênh lệch đối xứng
Biểu đồ Venn cho hiệu đối xứng của hai tập hợp
Trong trường hợp này, bạn sẽ nhận được một mảng chứa tất cả các phần tử của mảng A không có trong mảng B và ngược lại, vì vậy kết quả sẽ là
let difference = arrA.filter[x => !arrB.includes[x]];
0let difference = arrA
.filter[x => !arrB.includes[x]]
.concat[arrB.filter[x => !arrA.includes[x]]];
liên hiệp
Biểu đồ Venn cho hợp của hai tập hợp
Phép hợp phải là đơn giản nhất trong số chúng, cuối cùng, kết quả phải là tất cả các phần tử từ A, tất cả từ B hoặc cả hai như thế này
let difference = arrA.filter[x => !arrB.includes[x]];
1let union = [...arrA, ...arrB];
Tuy nhiên, có một vấn đề là nếu chúng ta sử dụng toán tử trải rộng, chúng ta sẽ nhận được các phần tử trùng lặp, vì vậy về mặt lý thuyết, đó không phải là một phép hợp. Để làm điều này, chúng tôi có thể sử dụng Bộ để giúp chúng tôi
let union = [...new Set[[...arrA, ...arrB]];
Tại sao? . Vì vậy, bạn sẽ không có bản sao mà sẽ phải sử dụng Set Object
Vì vậy, ngay bây giờ, ES6 thuần vanilla có thể cạnh tranh trực tiếp với các triển khai khác như jQuery, lodash hoặc gạch dưới và bạn có thể giảm mã từ các triển khai này
function symmetricDifference[a1, a2] {
var result = [];
for [var i = 0; i < a1.length; i++] {
if [a2.indexOf[a1[i]] === -1] {
result.push[a1[i]];
}
}
for [i = 0; i < a2.length; i++] {
if [a1.indexOf[a2[i]] === -1] {
result.push[a2[i]];
}
}
return result;
}
đến một hoặc hai dòng hoặc mã. Khá hữu ích Uh?
Nếu bạn có câu hỏi hoặc ý tưởng khác để giải quyết vấn đề của Liên minh, hãy cho tôi biết trong phần nhận xét, bia và sao cho tất cả
Trong bài viết này, chúng ta sẽ tìm hiểu cách so sánh hai mảng chỉ bằng một dòng mã trong JavaScript. Đây là đoạn mã JavaScript một dòng sử dụng một trong những tính năng phổ biến nhất của ES6 =>
let difference = arrA.filter[x => !arrB.includes[x]];
5Hãy xác định chức năng ngắn này
________số 8Tham số
let difference = arrA.filter[x => !arrB.includes[x]];
6 và let difference = arrA.filter[x => !arrB.includes[x]];
7 là mảngconst isEqual = [a, b] => a.length === b.length && a.every[[v, i] => v === b[i]];
Mảng là đối tượng trong JavaScript, do đó, toán tử ba bằng
let difference = arrA.filter[x => !arrB.includes[x]];
8 chỉ trả về let difference = arrA.filter[x => !arrB.includes[x]];
9 nếu các mảng có cùng tham chiếuLàm thế nào để bạn so sánh xem hai mảng có bằng nhau không? . thông số JavaScript xác định 4 cách khác nhau để kiểm tra xem hai giá trị có "bằng nhau" hay không và điều đó không tính đến sự bình đẳng sâu sắc giữa các đối tượng
Trong những trường hợp như thế này, bạn nên trình bày rõ ràng nhất có thể về ý nghĩa của cụm từ "bình đẳng". " Trong công nghệ phần mềm, đặt câu hỏi đúng cách thường làm cho câu trả lời trở nên rõ ràng
Với ý nghĩ đó, đây là 3 định nghĩa về đẳng thức cho mảng và cách kiểm tra chúng
Cùng chiều dài, mỗi giá trị bằng nhau
Một cách tiếp cận để so sánh
let difference = arrA.filter[x => !arrB.includes[x]];
6 và let difference = arrA.filter[x => !arrB.includes[x]];
7 là kiểm tra xem mỗi giá trị của let difference = arrA.filter[x => !arrB.includes[x]];
6 có hoàn toàn bằng với giá trị tương ứng của let difference = arrA.filter[x => !arrB.includes[x]];
7 hay không. Điều này hoạt động tốt nếu tất cả các phần tử của mảng là nguyên thủy trái ngược với các đối tượngBình đẳng sâu sắc với POJO
Hàm
let difference = arrA.filter[x => !arrB.includes[x]];
4 trước hoạt động rất tốt đối với các giá trị nguyên thủy, nhưng không phù hợp nếu bạn muốn so sánh các đối tượng theo giá trịMột cách gọn gàng để tính đến các giá trị đối tượng là so sánh các mảng theo đầu ra
let difference = arrA.filter[x => !arrB.includes[x]];
5 của chúngCách tiếp cận này rất tiện lợi vì nó yêu cầu mã tối thiểu và không có thư viện bên ngoài. Tuy nhiên, việc so sánh đầu ra của
let difference = arrA.filter[x => !arrB.includes[x]];
5 có một trường hợp cạnh không may có thể là một vấn đề tùy thuộc vào trường hợp sử dụng của bạn. Vì let difference = arrA.filter[x => !arrB.includes[x]];
80 không phải là một giá trị JSON hợp lệ, các mảng bên dưới có cùng đầu ra let difference = arrA.filter[x => !arrB.includes[x]];
5, vì let difference = arrA.filter[x => !arrB.includes[x]];
5 chuyển đổi let difference = arrA.filter[x => !arrB.includes[x]];
80 thành let difference = arrA.filter[x => !arrB.includes[x]];
84let difference = arrA.filter[x => !arrB.includes[x]];
0Sử dụng let difference = arrA.filter[x => !arrB.includes[x]];
85 của Lodash
Ngoài câu hỏi khó hiểu về
let difference = arrA.filter[x => !arrB.includes[x]];
84 so với let difference = arrA.filter[x => !arrB.includes[x]];
80, việc so sánh đầu ra của let difference = arrA.filter[x => !arrB.includes[x]];
5 cũng không tính đến các loại đối tượng. Đối với let difference = arrA.filter[x => !arrB.includes[x]];
5, một đối tượng có hàm let difference = arrA.filter[x => !arrB.includes[x]];
90 trả về 42 cũng giống như số 42Tương tự, một đối tượng tùy chỉnh giống như một POJO
Mặt khác, hàm
let difference = arrA.filter[x => !arrB.includes[x]];
85 của Lodash tính đến tất cả những điều nàyHàm
let difference = arrA.filter[x => !arrB.includes[x]];
85 của Lodash là cách tốt nhất nếu bạn cần tất cả chuông và còi để kiểm tra xem các đối tượng có cùng lớp không. Cách tiếp cận let difference = arrA.filter[x => !arrB.includes[x]];
5 hoạt động tốt đối với POJO, chỉ cần đảm bảo rằng bạn tính đến let difference = arrA.filter[x => !arrB.includes[x]];
84 và chỉ sử dụng nó với dữ liệu đáng tin cậy - let difference = arrA.filter[x => !arrB.includes[x]];
90 có thể là một lỗ hổng bảo mật