Giao điểm javascript của hai mảng

Chúng ta có hai mảng Số và chúng ta được yêu cầu viết một hàm, chẳng hạn như giao điểm () tính toán giao điểm của chúng và trả về một mảng chứa các phần tử giao nhau theo bất kỳ thứ tự nào. Mỗi phần tử trong kết quả sẽ xuất hiện nhiều lần như nó hiển thị trong cả hai mảng

Ví dụ - Nếu,

Input: arr1 = [1,2,3,1], arr2 = [1,3,1]
Output: [1,3,1]

Tiếp cận

Nếu các mảng đã được sắp xếp, chúng ta có thể đã sử dụng cách tiếp cận hai con trỏ với cả hai con trỏ ban đầu đều trỏ đến 0 ở đầu mảng tương ứng và chúng ta có thể tiến hành tăng con trỏ tương ứng và đó sẽ là phức hợp O(m+n) w. r. t. thời gian trong đó m và n là kích thước của mảng

Nhưng vì chúng ta có các mảng chưa được sắp xếp nên không có logic trong việc sắp xếp các mảng và sau đó sử dụng phương pháp này, chúng ta sẽ kiểm tra mọi giá trị của giá trị đầu tiên so với giá trị thứ hai và xây dựng một mảng giao nhau. Điều này sẽ khiến chúng tôi mất O(n^2) thời gian

Đối tượng

  const set1 = new Set(arr1)
8 chỉ lưu trữ các giá trị duy nhất, do đó, việc chuyển đổi mảng thành
  const set1 = new Set(arr1)
8 sẽ tự động loại bỏ tất cả các giá trị trùng lặp

Chúng tôi đã làm điều này bởi vì chúng tôi không muốn giao điểm của chúng tôi chứa các giá trị trùng lặp, e. g.

  const arr1 = [2, 4, 4]
  const set1 = new Set(arr1) // {2, 4}
  set1.has(2) // will return true
  set1.has(5) // will return false
0

Sau đó, chúng tôi đã sử dụng toán tử trải rộng (. ) để chuyển đổi

  const set1 = new Set(arr1)
8 trở lại thành một mảng và được gọi là phương thức
  const arr1 = [2, 4, 4]
  const set1 = new Set(arr1) // {2, 4}
  set1.has(2) // will return true
  set1.has(5) // will return false
2 trên mảng

Hàm chúng tôi đã chuyển đến Mảng. phương thức lọc được gọi với từng phần tử của mảng

Trên mỗi lần lặp, chúng tôi kiểm tra xem phần tử hiện tại có được chứa trong

  const set1 = new Set(arr1)
8 thứ hai không

Phương thức

  const set1 = new Set(arr1)
80 trả về một mảng chứa các phần tử mà hàm kiểm tra trả về giá trị trung thực

Ví dụ: nếu hai mảng là

  const arr1 = [2, 4, 4]
  const set1 = new Set(arr1) // {2, 4}
  set1.has(2) // will return true
  set1.has(5) // will return false
5 và
  const arr1 = [2, 4, 4]
  const set1 = new Set(arr1) // {2, 4}
  set1.has(2) // will return true
  set1.has(5) // will return false
6, thì đầu ra phải là
  const arr1 = [2, 4, 4]
  const set1 = new Set(arr1) // {2, 4}
  set1.has(2) // will return true
  set1.has(5) // will return false
7, vì đó là hai phần tử duy nhất có trong cả hai mảng

Vấn đề này là một ví dụ tốt để sử dụng các tập hợp. Tập hợp là một đối tượng có các giá trị duy nhất và đặc biệt hữu ích trong các vấn đề mà bạn được yêu cầu trả về các phần tử duy nhất. Bạn có thể tìm hiểu thêm về bộ tại đây

Trong bài đăng này, tôi sẽ thảo luận về cách tôi muốn tiếp cận vấn đề này, sau đó mã hóa giải pháp trong JavaScript

Tiếp cận vấn đề

Trong vấn đề này, chúng tôi đã cung cấp hai mảng, cả hai có thể có các số lặp lại trong đó và chúng tôi chỉ muốn trả về các giá trị được chia sẻ, duy nhất. Một cách để giải quyết vấn đề này là biến mảng đầu tiên thành một tập hợp, điều này sẽ loại bỏ mọi giá trị trùng lặp

Biến một mảng thành một tập hợp thực sự là một quá trình rất ngắn. Giả sử bạn có một mảng tên là

  const arr1 = [2, 4, 4]
  const set1 = new Set(arr1) // {2, 4}
  set1.has(2) // will return true
  set1.has(5) // will return false
8, tương đương với
  const arr1 = [2, 4, 4]
  const set1 = new Set(arr1) // {2, 4}
  set1.has(2) // will return true
  set1.has(5) // will return false
0 và muốn tạo một tập hợp dựa trên mảng đó

  const set1 = new Set(arr1)

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Dựa trên tuyên bố trên,

  const arr1 = [2, 4, 4]
  const set1 = new Set(arr1) // {2, 4}
  set1.has(2) // will return true
  set1.has(5) // will return false
1 sẽ bằng
  const arr1 = [2, 4, 4]
  const set1 = new Set(arr1) // {2, 4}
  set1.has(2) // will return true
  set1.has(5) // will return false
2

Khi chúng ta biến mảng đã cho đầu tiên thành một tập hợp, chúng ta có thể đi qua từng phần tử của mảng đã cho thứ hai và kiểm tra xem nó có trong tập hợp không. Nếu có, chúng tôi sẽ thêm nó vào một mảng kết quả, mà chúng tôi sẽ trả về ở cuối. Chúng tôi cũng muốn xóa phần tử đó khỏi tập hợp, để nếu mảng thứ hai có giá trị trùng lặp, chúng tôi không thêm nó vào mảng kết quả hai lần

Để kiểm tra xem một tập hợp có phần tử hay không, chúng ta có thể sử dụng phương thức

  const arr1 = [2, 4, 4]
  const set1 = new Set(arr1) // {2, 4}
  set1.has(2) // will return true
  set1.has(5) // will return false
3, phương thức này trả về giá trị boolean (đúng hoặc sai). Ví dụ: nếu chúng tôi vẫn đang làm việc với
  const arr1 = [2, 4, 4]
  const set1 = new Set(arr1) // {2, 4}
  set1.has(2) // will return true
  set1.has(5) // will return false
1 từ bên trên

  const arr1 = [2, 4, 4]
  const set1 = new Set(arr1) // {2, 4}
  set1.has(2) // will return true
  set1.has(5) // will return false

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Để xóa một phần tử khỏi một tập hợp, chúng ta có thể sử dụng phương thức

  const arr1 = [2, 4, 4]
  const set1 = new Set(arr1) // {2, 4}
  set1.has(2) // will return true
  set1.has(5) // will return false
5, phương thức này sẽ xóa một phần tử cụ thể khỏi một tập hợp. Để tiếp tục với cùng một ví dụ

  const arr1 = [2, 4, 4]
  const set1 = new Set(arr1) // {2, 4}
  set1.delete(2) // set1 = {4}

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Mã hóa giải pháp

Với các phương pháp trên, chúng ta có thể bắt đầu bằng cách tạo một tập hợp mới dựa trên

  const arr1 = [2, 4, 4]
  const set1 = new Set(arr1) // {2, 4}
  set1.has(2) // will return true
  set1.has(5) // will return false
6, đây là mảng được nhập đầu tiên. Chúng ta có thể làm điều này bằng cách đặt một biến mới có tên là
  const arr1 = [2, 4, 4]
  const set1 = new Set(arr1) // {2, 4}
  set1.has(2) // will return true
  set1.has(5) // will return false
7 bằng với
  const arr1 = [2, 4, 4]
  const set1 = new Set(arr1) // {2, 4}
  set1.has(2) // will return true
  set1.has(5) // will return false
8

Chúng ta cũng có thể tạo một mảng mới có tên là

  const arr1 = [2, 4, 4]
  const set1 = new Set(arr1) // {2, 4}
  set1.has(2) // will return true
  set1.has(5) // will return false
9, chúng ta sẽ bắt đầu mảng này dưới dạng một mảng trống. Mảng này sẽ được trả về ở cuối hàm, vì vậy chúng ta có thể đưa vào câu lệnh kết quả ngay bây giờ

  const arr1 = [2, 4, 4]
  const set1 = new Set(arr1) // {2, 4}
  set1.has(2) // will return true
  set1.has(5) // will return false
4

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Bây giờ, chúng tôi sẽ muốn kiểm tra từng giá trị của

  const arr1 = [2, 4, 4]
  const set1 = new Set(arr1) // {2, 4}
  set1.delete(2) // set1 = {4}
0 để xem liệu nó có trong
  const arr1 = [2, 4, 4]
  const set1 = new Set(arr1) // {2, 4}
  set1.has(2) // will return true
  set1.has(5) // will return false
7 không. Để làm điều này, chúng ta có thể thiết lập một vòng lặp for, vòng lặp này sẽ lặp qua từng giá trị của
  const arr1 = [2, 4, 4]
  const set1 = new Set(arr1) // {2, 4}
  set1.delete(2) // set1 = {4}
0 và do đó sẽ đi từ 0 cho đến hết độ dài của mảng
  const arr1 = [2, 4, 4]
  const set1 = new Set(arr1) // {2, 4}
  set1.delete(2) // set1 = {4}
0

  const arr1 = [2, 4, 4]
  const set1 = new Set(arr1) // {2, 4}
  set1.has(2) // will return true
  set1.has(5) // will return false
9

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Bên trong vòng lặp for, chúng ta sẽ muốn kiểm tra xem tập hợp có mỗi phần tử của

  const arr1 = [2, 4, 4]
  const set1 = new Set(arr1) // {2, 4}
  set1.delete(2) // set1 = {4}
0 không. Mỗi phần tử của
  const arr1 = [2, 4, 4]
  const set1 = new Set(arr1) // {2, 4}
  set1.delete(2) // set1 = {4}
0 được truy cập bằng
  const arr1 = [2, 4, 4]
  const set1 = new Set(arr1) // {2, 4}
  set1.delete(2) // set1 = {4}
6. Sau đó, chúng ta có thể tạo một câu lệnh có điều kiện để xem liệu tập hợp có phần tử đó hay không, sử dụng
  const arr1 = [2, 4, 4]
  const set1 = new Set(arr1) // {2, 4}
  set1.delete(2) // set1 = {4}
7

Nếu điều này trả về true, thì chúng ta sẽ muốn làm hai việc. trước tiên, chúng tôi sẽ muốn thêm phần tử vào mảng kết quả, sử dụng

  const arr1 = [2, 4, 4]
  const set1 = new Set(arr1) // {2, 4}
  set1.delete(2) // set1 = {4}
8. Sau đó, chúng tôi sẽ muốn xóa phần tử đó khỏi
  const arr1 = [2, 4, 4]
  const set1 = new Set(arr1) // {2, 4}
  set1.has(2) // will return true
  set1.has(5) // will return false
7, để chúng tôi không thêm các giá trị trùng lặp vào mảng
  const arr1 = [2, 4, 4]
  const set1 = new Set(arr1) // {2, 4}
  set1.has(2) // will return true
  set1.has(5) // will return false
9

  const set1 = new Set(arr1)
7

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Điều này sẽ trả về một mảng chứa các giá trị duy nhất được chia sẻ bởi cả hai mảng

--

Hãy cho tôi biết nếu bạn có bất kỳ câu hỏi hoặc giải pháp thay thế nào để tìm giao điểm của hai mảng

Làm cách nào để có giao điểm của hai mảng trong JavaScript?

Trong chương trình trên, một phép giao được thực hiện giữa hai mảng bằng cách sử dụng phương thức filter() . Phương thức lọc lặp qua một mảng và trả về các phần tử mảng vượt qua điều kiện đã cho. Mỗi phần tử của mảng đầu tiên được so sánh với mảng thứ hai bằng phương thức indexOf().

Làm cách nào để lấy các đối tượng chung từ hai mảng trong JavaScript?

Phương pháp 1. .
Đầu tiên, lặp qua tất cả các phần tử trong một trong các mảng
Sau đó, đối với mỗi phần tử trong mảng này, lặp qua tất cả các phần tử của mảng khác
Nếu có phần tử thì thêm phần tử này vào mảng mới
Nếu không, hãy tiếp tục với phần tử tiếp theo

Làm cách nào để kết hợp hai mảng đối tượng trong JavaScript?

Để có được sự kết hợp của hai mảng. const arr1 = ['a', 'b', 'c']; . bộ lọc( phần tử =>. mảng2. gồm(phần tử) ); .

Bạn có thể ánh xạ hai mảng trong JavaScript không?

Cách tiếp cận. Đối với điều này, chúng ta có thể tạo hai mảng, trong đó một mảng chứa các phần tử mảng sẽ được ánh xạ và mảng thứ hai lưu trữ tất cả các giá trị trả về của hàm tương ứng. We can use the JavaScript Array push() method to push the return values of the function in the output array.