Giả sử chúng ta có hai mảng các ký tự như thế này -
const arr1 = [1, 3, 2, 4, 5, 6]; const arr2 = [1, 2, 5];
Chúng tôi được yêu cầu viết một hàm JavaScript có hai mảng như vậy. Sau đó, hàm của chúng ta sẽ trả về một mảng mới chứa tất cả các phần tử của arr1 nhưng được sắp xếp theo arr2.
Giống như các phần tử xuất hiện trong cả mảng sẽ xuất hiện đầu tiên theo thứ tự của chúng trong mảng thứ hai, tiếp theo là các phần tử chỉ hiện diện trong mảng đầu tiên vẫn giữ nguyên thứ tự của chúng.
Ví dụ
Mã cho điều này sẽ là -
const arr1 = [1, 3, 2, 4, 5, 6]; const arr2 = [1, 2, 5]; const sortByReference = (arr1, arr2) => { const inBoth = el => arr1.indexOf(el) !== -1 && arr2.indexOf(el) !== -1; const sorter = (a, b) => { if(inBoth(a) && inBoth(b)){ return arr1.indexOf(a) - arr2.indexOf(b); } if(inBoth(a)){ return -1; }; if(inBoth(b)){ return 1; }; return 0; }; arr1.sort(sorter); }; sortByReference(arr1, arr2); console.log(arr1);
Đầu ra
Đầu ra trong bảng điều khiển -
[ 1, 2, 5, 3, 4, 6 ]