Hướng dẫn how do you find min and max values in an array in javascript? - làm cách nào để bạn tìm thấy các giá trị tối thiểu và tối đa trong một mảng trong javascript?
Làm thế nào về việc tăng cường đối tượng mảng tích hợp để sử dụng ____ 57/________ 58 Thay vào đó: Show
Đây là một jsfiddle.JSFiddle. Tăng cường các bản dựng có thể gây va chạm với các thư viện khác (một số xem), vì vậy bạn có thể thoải mái hơn chỉ với ________ 59'ing 0 trực tiếp cho mảng của bạn:
Thay phiên, giả sử Trình duyệt của bạn hỗ trợ Ecmascript 6, bạn có thể sử dụng cú pháp lan truyền có chức năng tương tự như phương thức 9:
Robg Huy hiệu vàng 138K3030 gold badges170 silver badges207 bronze badges Đã trả lời ngày 3 tháng 11 năm 2009 lúc 18:23Nov 3, 2009 at 18:23
Roatin Marthroatin MarthRoatin Marth Phù vàng 23K3 Huy hiệu bạc 55 Huy hiệu Đồng3 gold badges51 silver badges55 bronze badges 14 Sử dụng toán tử lây lan (ES6)
Khí 5.3702 Huy hiệu vàng24 Huy hiệu bạc32 Huy hiệu Đồng2 gold badges24 silver badges32 bronze badges Đã trả lời ngày 23 tháng 8 năm 2016 lúc 16:37Aug 23, 2016 at 16:37
Abdennour toumiabdennour toumiAbdennour TOUMI 80.9K36 Huy hiệu vàng233 Huy hiệu bạc243 Huy hiệu Đồng36 gold badges233 silver badges243 bronze badges 10 Đối với các mảng lớn (~ 10⁷ phần tử), 8 và 7 đều tạo ra lỗi sau trong node.js.
Một giải pháp mạnh mẽ hơn là không thêm mọi yếu tố vào ngăn xếp cuộc gọi, mà thay vào đó là vượt qua một mảng:
Nếu bạn lo lắng về tốc độ, mã sau sẽ nhanh hơn ~ 3 lần thì 4 là trên máy tính của tôi. Xem https://jsben.ch/jpoyl.
Nếu các mảng của bạn chứa các chuỗi thay vì số, bạn cũng cần ép chúng thành các số. Mã dưới đây làm điều đó, nhưng nó làm chậm mã xuống ~ 10 lần trên máy của tôi. Xem https://jsben.ch/upipd.
Đã trả lời ngày 18 tháng 11 năm 2012 lúc 14:00Nov 18, 2012 at 14:00
Linus Unnebäcklinus UnnebäckLinus Unnebäck 21.3K12 Huy hiệu vàng71 Huy hiệu bạc88 Huy hiệu đồng12 gold badges71 silver badges88 bronze badges 6 tl;dr
Giải pháp MDNCác tài liệu chính thức của MDN trên 5 đã bao gồm vấn đề này:
Kích thước tối đa của một mảngTheo MDN, các giải pháp lây lan 9 và lan truyền có giới hạn là 65536 xuất phát từ giới hạn số lượng đối số tối đa:
Họ thậm chí còn cung cấp một giải pháp lai không thực sự có hiệu suất tốt so với các giải pháp khác. Xem bài kiểm tra hiệu suất dưới đây để biết thêm. Trong năm 2019, giới hạn thực tế là kích thước tối đa của ngăn xếp cuộc gọi. Đối với các trình duyệt máy tính để bàn dựa trên crom hiện đại, điều này có nghĩa là khi tìm kiếm tối đa/tối đa với 9 hoặc lây lan, thực tế kích thước tối đa cho số chỉ các mảng là ~ 120000. Trên đây, sẽ có một luồng tràn ngăn xếp và lỗi sau sẽ được ném:actual limit is the maximum size of the call stack. For modern Chromium based desktop browsers this means that when it comes to finding
min/max with 9 or spread, practically the maximum size for numbers only arrays is ~120000. Above this, there will be a stack overflow and the following error will be thrown:
Một giải pháp mạnh mẽ hơn là không thêm mọi yếu tố vào ngăn xếp cuộc gọi, mà thay vào đó là vượt qua một mảng: Nếu bạn lo lắng về tốc độ, mã sau sẽ nhanh hơn ~ 3 lần thì 0Nếu các mảng của bạn chứa các chuỗi thay vì số, bạn cũng cần ép chúng thành các số. Mã dưới đây làm điều đó, nhưng nó làm chậm mã xuống ~ 10 lần trên máy của tôi. Xem https://jsben.ch/upipd.Đã trả lời ngày 18 tháng 11 năm 2012 lúc 14:00random number only array with 100000 items. Linus Unnebäcklinus Unnebäckstandard loop (which BTW doesn't have the size limitation) is the fastest everywhere. 2 as the slowest.21.3K12 Huy hiệu vàng71 Huy hiệu bạc88 Huy hiệu đồng Giải pháp MDN Các tài liệu chính thức của MDN trên function arrayMin(arr) { var len = arr.length, min = Infinity; while (len--) { if (Number(arr[len]) < min) { min = Number(arr[len]); } } return min; }; function arrayMax(arr) { var len = arr.length, max = -Infinity; while (len--) { if (Number(arr[len]) > max) { max = Number(arr[len]); } } return max; }; 5 đã bao gồm vấn đề này:Hàm sau sử dụng hàm.prototype.apply () để tìm phần tử tối đa trong một mảng số. function arrayMin(arr) { var len = arr.length, min = Infinity; while (len--) { if (Number(arr[len]) < min) { min = Number(arr[len]); } } return min; }; function arrayMax(arr) { var len = arr.length, max = -Infinity; while (len--) { if (Number(arr[len]) > max) { max = Number(arr[len]); } } return max; }; 6 tương đương với function arrayMin(arr) { var len = arr.length, min = Infinity; while (len--) { if (Number(arr[len]) < min) { min = Number(arr[len]); } } return min; }; function arrayMax(arr) { var len = arr.length, max = -Infinity; while (len--) { if (Number(arr[len]) > max) { max = Number(arr[len]); } } return max; }; 7, nhưng bạn có thể sử dụng function arrayMin(arr) { var len = arr.length, min = Infinity; while (len--) { if (Number(arr[len]) < min) { min = Number(arr[len]); } } return min; }; function arrayMax(arr) { var len = arr.length, max = -Infinity; while (len--) { if (Number(arr[len]) > max) { max = Number(arr[len]); } } return max; }; 8 trên các mảng được xây dựng theo chương trình ở bất kỳ kích thước nào.Hoặc với toán tử lây lan mới, nhận được tối đa của một mảng trở nên dễ dàng hơn rất nhiều.Kích thước tối đa của một mảngTheo MDN, các giải pháp lây lan 9 và lan truyền có giới hạn là 65536 xuất phát từ giới hạn số lượng đối số tối đa:Jun 14, 2015 at 21:22
Nhưng hãy cẩn thận: Trong việc sử dụng áp dụng theo cách này, bạn có nguy cơ vượt quá giới hạn độ dài đối số của động cơ JavaScript. Hậu quả của việc áp dụng một chức năng với quá nhiều đối số (nghĩ nhiều hơn hàng chục ngàn đối số) khác nhau giữa các động cơ (JavaScriptCore có giới hạn đối số khó mã hành vi) không được xác định. Một số động cơ sẽ ném một ngoại lệ. Một cách nghiêm túc hơn, những người khác sẽ tùy ý giới hạn số lượng đối số thực sự được truyền cho chức năng được áp dụng. Để minh họa trường hợp sau này: nếu một động cơ như vậy có giới hạn bốn đối số (tất nhiên giới hạn thực tế cao hơn đáng kể), thì sẽ như thể các đối số 5, 6, 2, 3 đã được thông qua để áp dụng trong các ví dụ trên, thay vì mảng đầy đủ.totymedli Họ thậm chí còn cung cấp một giải pháp lai không thực sự có hiệu suất tốt so với các giải pháp khác. Xem bài kiểm tra hiệu suất dưới đây để biết thêm.20 gold badges128 silver badges160 bronze badges 4 Nếu bạn hoang tưởng như tôi về việc sử dụng 4 (có thể gây ra lỗi khi đưa ra các mảng lớn theo MDN), hãy thử điều này: 1Hoặc, trong ES6: 2Các chức năng ẩn danh là không may cần thiết (thay vì sử dụng 5 vì 2 không chỉ chuyển những người đó là tốt.Đã trả lời ngày 27 tháng 7 năm 2015 lúc 1:00Jul 27, 2015 at 1:00
7 Các phương thức thay thế 8 và 7 là những phương pháp tuyệt vời để có được vật phẩm tối thiểu và tối đa ra khỏi bộ sưu tập các mặt hàng, tuy nhiên điều quan trọng là phải biết về một số lỗ sâu răng có thể đi kèm với nó.Sử dụng chúng với một mảng chứa số lượng lớn các mục (nhiều hơn ~ 10⁷ các mục, phụ thuộc vào trình duyệt của người dùng) rất có thể sẽ bị sập và đưa ra thông báo lỗi sau:crash and give the following error message: 3
Cập nhật trình duyệt mới nhất có thể trả về 3 instead. That might be a better way to handle errors, however it doesn't solve the problem just yet.Thay vào đó, hãy xem xét sử dụng một cái gì đó như vậy: 4Hoặc với thời gian chạy tốt hơn: 5Hoặc để có được cả phút và tối đa: 6Hoặc với thời gian chạy tốt hơn*: 7* Được thử nghiệm với 1.000.000 mục: Chỉ để tham khảo, thời gian chạy hàm đầu tiên (trên máy của tôi) là 15,84ms so với hàm thứ 2 chỉ với 4,32ms. Đã trả lời ngày 2 tháng 10 năm 2018 lúc 17:34Oct 2, 2018 at 17:34
Lior Elromlior ElromLior Elrom 18.7K16 Huy hiệu vàng77 Huy hiệu bạc92 Huy hiệu Đồng16 gold badges77 silver badges92 bronze badges 3 Hai cách ngắn hơn và dễ dàng: 8Cách 1:: 9Cách 2:: 0Đã trả lời ngày 18 tháng 5 năm 2018 lúc 1:37May 18, 2018 at 1:37
3 4 thường được sử dụng khi ý định là gọi hàm variadic với danh sách các giá trị đối số, ví dụ:Hàm 5 trả về số không hoặc nhiều số lớn nhất. 1Phương pháp 5 không cho phép bạn vượt qua trong một mảng. Nếu bạn có một danh sách các giá trị mà bạn cần để có được lớn nhất, bạn thường gọi hàm này bằng hàm.prototype.apply (), ví dụ: 2Tuy nhiên, kể từ ECMAScript 6, bạn có thể sử dụng toán tử lây lan:ECMAScript 6 you can use the spread operator:
Sử dụng toán tử lây lan, ở trên có thể được viết lại như vậy: 3Khi gọi một hàm bằng toán tử Variadic, bạn thậm chí có thể thêm các giá trị bổ sung, ví dụ: 4Bonus: Toán tử lan truyền cho phép bạn sử dụng cú pháp theo nghĩa đen của mảng để tạo các mảng mới trong các tình huống trong ES5 bạn sẽ cần phải quay lại mã bắt buộc, sử dụng kết hợp 7, 8, v.v. 5Đã trả lời ngày 18 tháng 12 năm 2014 lúc 1:38Dec 18, 2014 at 1:38
GajusgajusGajus 65.4K68 Huy hiệu vàng264 Huy hiệu bạc425 Huy hiệu Đồng68 gold badges264 silver badges425 bronze badges 1 Bạn làm điều đó bằng cách mở rộng loại mảng: 6Được tăng cường từ đây (bởi John Resig) Đã trả lời ngày 3 tháng 11 năm 2009 lúc 18:35Nov 3, 2009 at 18:35
Brettkellybrettkellybrettkelly 27.1k8 Huy hiệu vàng53 Huy hiệu bạc70 Huy hiệu đồng8 gold badges53 silver badges70 bronze badges Một giải pháp đơn giản để tìm giá trị tối thiểu trên 9 của các phần tử là sử dụng hàm nguyên mẫu 9 2: 7hoặc sử dụng hàm Math.min () tích hợp của JavaScript (cảm ơn @TenFlex): 8Điều này đặt 2 thành 3, và sau đó kiểm tra xem 4 liệu nó có hoàn toàn thấp hơn so với 2 hiện tại hay không. Nếu 6 thì 2 được cập nhật lên 8. Khi tất cả các phần tử mảng đã được xử lý, 2 được trả lại do kết quả.Chỉnh sửa: Bao gồm vị trí của giá trị tối thiểu:: Include position of minimum value: 9Đã trả lời ngày 29 tháng 10 năm 2017 lúc 11:26Oct 29, 2017 at 11:26
2 Đối với một giải pháp hiện đại, ngắn gọn, người ta có thể thực hiện hoạt động 2 trên mảng, theo dõi các giá trị tối thiểu và tối đa hiện tại, do đó mảng chỉ được lặp lại một lần (là tối ưu). Việc chuyển nhượng phá hủy được sử dụng ở đây cho sự cô đọng.
0Để chỉ tìm thấy mức tối thiểu hoặc tối đa, chúng ta có thể sử dụng thực hiện hoạt động giảm theo cùng một cách, nhưng chúng ta chỉ cần theo dõi giá trị tối ưu trước đó. Phương pháp này tốt hơn so với sử dụng 9 vì nó sẽ không gây ra lỗi khi mảng quá lớn cho ngăn xếp. 1Đã trả lời ngày 20 tháng 8 năm 2020 lúc 22:47Aug 20, 2020 at 22:47
UnitigatedUnmitigatedUnmitigated 50.3k7 Huy hiệu vàng 50 Huy hiệu bạc68 Huy hiệu Đồng7 gold badges50 silver badges68 bronze badges Những người khác đã đưa ra một số giải pháp trong đó họ tăng cường 02. Tất cả những gì tôi muốn trong câu trả lời này là làm rõ liệu đó là 03 hay 04. Vậy bối cảnh nào nên được sử dụng, 05 hoặc 06?So what context should be used, 05 or 06?Khi chuyển 06 làm bối cảnh cho 9, thì bối cảnh sẽ mặc định cho đối tượng toàn cầu (đối tượng 09 trong trường hợp trình duyệt). Vượt qua đối tượng 05 như bối cảnh sẽ là giải pháp chính xác, nhưng nó cũng sẽ không bị tổn thương khi vượt qua 06. Đây là một ví dụ khi 06 có thể gây rắc rối, khi trang trí chức năng 7: 2Trên đây sẽ ném một ngoại lệ vì 14 sẽ được đánh giá là 15, đó là 16. Nếu chúng tôi thay thế 06 bằng 05, mọi thứ sẽ hoạt động như mong đợi và chuỗi "foo" sẽ được in lên màn hình (tôi đã thử nghiệm điều này bằng Mozilla Rhino).Bạn có thể cho rằng không ai đã trang trí 7 vì vậy, vượt qua 06 sẽ hoạt động mà không gặp vấn đề gì.Đã trả lời ngày 3 tháng 11 năm 2009 lúc 18:39Nov 3, 2009 at 18:39
Ionuț G. Stanionuț G. StanIonuț G. Stan 173K18 Huy hiệu vàng187 Huy hiệu bạc199 Huy hiệu đồng18 gold badges187 silver badges199 bronze badges 2 Một cách nữa để làm điều đó: 3Cách sử dụng: 4
gion_13 40.8k10 Huy hiệu vàng97 Huy hiệu bạc107 Huy hiệu đồng10 gold badges97 silver badges107 bronze badges Đã trả lời ngày 26 tháng 9 năm 2012 lúc 18:43Sep 26, 2012 at 18:43
SBRSBRsbr 4.6075 Huy hiệu vàng41 Huy hiệu bạc46 Huy hiệu đồng5 gold badges41 silver badges46 bronze badges 2 Tôi ngạc nhiên khi không đề cập đến chức năng giảm. 52 Điều này có thể phù hợp với mục đích của bạn. 6Đã trả lời ngày 3 tháng 11 năm 2009 lúc 18:21Nov 3, 2009 at 18:21
ChaopandionchaospandionChaosPandion 76.4K18 Huy hiệu vàng117 Huy hiệu bạc155 Huy hiệu đồng18 gold badges117 silver badges155 bronze badges 5 Đặt mảng = [267, 306, 108] để dài nhất = math.max (... mảng); Đã trả lời ngày 3 tháng 10 năm 2020 lúc 15:10Oct 3, 2020 at 15:10
Trilok Singhtrilok SinghTrilok Singh 1.07911 Huy hiệu bạc8 Huy hiệu đồng11 silver badges8 bronze badges 1 Tôi nghĩ rằng tôi sẽ chia sẻ giải pháp đơn giản và dễ hiểu của mình. Cho tối thiểu: 7Và cho tối đa: 8
Đã trả lời ngày 13 tháng 10 năm 2016 lúc 16:37Oct 13, 2016 at 16:37
IonStionutIonut 10,8K4 Huy hiệu vàng44 Huy hiệu bạc69 Huy hiệu đồng4 gold badges44 silver badges69 bronze badges 9 Đối với các mảng lớn (~ 10⁷ phần tử), 8 và 7 mang đến một rangeRror (vượt quá kích thước ngăn xếp cuộc gọi tối đa) trong Node.js.Đối với các mảng lớn, một giải pháp nhanh và bẩn là: 9Đã trả lời ngày 24 tháng 1 năm 2012 lúc 12:43Jan 24, 2012 at 12:43
PeterpeterPeter 5.0685 Huy hiệu vàng28 Huy hiệu bạc38 Huy hiệu đồng5 gold badges28 silver badges38 bronze badges Đối với một mảng chứa các đối tượng thay vì số: 0Bạn có thể sử dụng 2 để lấy phần tử có giá trị nhỏ nhất (tối thiểu) 1hoặc giá trị lớn nhất (tối đa) 2Đã trả lời ngày 6 tháng 8 năm 2020 lúc 12:17Aug 6, 2020 at 12:17
Laktaklaktaklaktak 54.5K17 Huy hiệu vàng128 Huy hiệu bạc161 Huy hiệu đồng17 gold badges128 silver badges161 bronze badges Bên cạnh việc sử dụng hàm toán tối đa và tối thiểu, một hàm khác để sử dụng là hàm tích hợp của sort (): ở đây chúng ta đi 3
Đã trả lời ngày 14 tháng 2 năm 2020 lúc 15:29Feb 14, 2020 at 15:29
1 Tôi có cùng một vấn đề, tôi cần phải có được các giá trị tối thiểu và tối đa của một mảng và, thật ngạc nhiên, không có chức năng tích hợp nào cho các mảng. Sau khi đọc rất nhiều, tôi đã quyết định tự mình kiểm tra các giải pháp "Top 3":
Mã kiểm tra là đây: 4Mảng A được lấp đầy với 100.000 số nguyên ngẫu nhiên, mỗi hàm được thực hiện 10.000 lần trên Mozilla Firefox 28.0 trên máy tính để bàn Intel Pentium 4 2.99GHz với Windows Vista. Thời gian tính bằng vài giây, được truy xuất theo hàm hiệu suất.Không (). Kết quả là những điều này, với 3 chữ số phân đoạn và độ lệch chuẩn:
Dung dịch giảm chậm hơn 117% so với dung dịch riêng biệt. Giải pháp áp dụng là tồi tệ hơn, chậm hơn 2.118% so với giải pháp riêng biệt. Bên cạnh đó, như Peter quan sát, nó không hoạt động cho các mảng lớn (khoảng hơn 1.000.000 yếu tố). Ngoài ra, để hoàn thành các bài kiểm tra, tôi đã kiểm tra mã riêng biệt mở rộng này: 5Thời gian: mean = 0,218S, SD = 0,094 Vì vậy, nó chậm hơn 35% so với giải pháp rời rạc đơn giản, nhưng nó lấy cả giá trị tối đa và tối thiểu cùng một lúc (bất kỳ giải pháp nào khác sẽ mất ít nhất hai lần để lấy chúng). Khi OP cần cả hai giá trị, giải pháp riêng biệt sẽ là lựa chọn tốt nhất (ngay cả khi hai hàm riêng biệt, một để tính toán tối đa và một hàm khác để tính toán tối thiểu, chúng sẽ vượt trội so với tốt nhất thứ hai, giải pháp giảm). Đã trả lời ngày 2 tháng 4 năm 2014 lúc 17:46Apr 2, 2014 at 17:46
CyberknightCyberknightCyberknight 1582 Huy hiệu bạc6 Huy hiệu Đồng2 silver badges6 bronze badges Lặp lại, theo dõi khi bạn đi. 6Điều này sẽ để lại Min/Max Null nếu không có phần tử trong mảng. Sẽ đặt tối thiểu và tối đa trong một lần vượt qua nếu mảng có bất kỳ phần tử nào. Bạn cũng có thể mở rộng mảng bằng phương pháp 24 bằng cách sử dụng các phương pháp trên để cho phép tái sử dụng và cải thiện khả năng đọc. Xem Fiddle hoạt động tại http://jsfiddle.net/9c9fu/ 7Được dùng như 8Đã trả lời ngày 3 tháng 11 năm 2009 lúc 18:23Nov 3, 2009 at 18:23
TVanfossontvanfossontvanfosson 516K97 Huy hiệu vàng696 Huy hiệu bạc794 Huy hiệu Đồng97 gold badges696 silver badges794 bronze badges 1 Bạn có thể sử dụng chức năng sau ở bất cứ đâu trong dự án của mình: 9Và sau đó bạn có thể gọi các chức năng vượt qua mảng: 0
Falsarella 12.2k9 Huy hiệu vàng70 Huy hiệu bạc114 Huy hiệu đồng9 gold badges70 silver badges114 bronze badges Đã trả lời ngày 26 tháng 8 năm 2014 lúc 16:57Aug 26, 2014 at 16:57
Mã sau đây phù hợp với tôi: 1
Gogol 3,0034 huy hiệu vàng27 Huy hiệu bạc54 Huy hiệu đồng4 gold badges27 silver badges54 bronze badges Đã trả lời ngày 26 tháng 5 năm 2017 lúc 12:40May 26, 2017 at 12:40
0 2Cung cấp cho bạn giá trị tối đa trong một mảng số. 3Cung cấp cho bạn giá trị tối thiểu trong một mảng số. 4Đã trả lời ngày 20 tháng 6 năm 2020 lúc 20:33Jun 20, 2020 at 20:33
Adam Belekoadam BelekoAdam Beleko 5095 Huy hiệu bạc13 Huy hiệu Đồng5 silver badges13 bronze badges
Đã trả lời ngày 28 tháng 10 năm 2020 lúc 21:53Oct 28, 2020 at 21:53
Công cụ đơn giản, thực sự. 5
Falsarella 12.2k9 Huy hiệu vàng70 Huy hiệu bạc114 Huy hiệu đồng9 gold badges70 silver badges114 bronze badges Đã trả lời ngày 23 tháng 9 năm 2014 lúc 7:48Sep 23, 2014 at 7:48
BrianbrianBrian 3.6231 Huy hiệu vàng22 Huy hiệu bạc33 Huy hiệu đồng1 gold badge22 silver badges33 bronze badges Đây là một cách để có được giá trị tối đa từ một mảng các đối tượng.Tạo một bản sao (có lát), sau đó sắp xếp bản sao theo thứ tự giảm dần và lấy mục đầu tiên. 6
Falsarella 12.2k9 Huy hiệu vàng70 Huy hiệu bạc114 Huy hiệu đồng9 gold badges70 silver badges114 bronze badges Đã trả lời ngày 23 tháng 9 năm 2014 lúc 7:48Jan 9, 2014 at 18:46
BrianbrianBen 3.6231 Huy hiệu vàng22 Huy hiệu bạc33 Huy hiệu đồng9 silver badges8 bronze badges |