JavaScript nhận giá trị tối đa trong mảng

Hãy xem xét mảng đối tượng JavaScript sau. Mỗi đối tượng đại diện cho một người chơi trong nền tảng trò chơi bao gồm một mã định danh duy nhất [id], name của họ và số lượng wins đã đạt được

const players = [{
  id: 1,
  name: "Leanne Graham",
  wins: 13,
}, {
  id: 2,
  name: "Ervin Howell",
  wins: 8,
}, {
  id: 3,
  name: "Clementine Bauch",
  wins: 19
}];

Làm thế nào để bạn tìm thấy người chơi có nhiều chiến thắng nhất?

Một đặc điểm đáng chú ý của mảng này là nó chưa được sắp xếp nên chúng ta không thể đơn giản lấy phần tử đầu tiên [hoặc cuối cùng, tùy thuộc vào hướng sắp xếp]. Thay vào đó, chúng ta cần một thuật toán so sánh các phần tử với nhau và trả về phần tử có giá trị wins tối đa

Mảng. giảm là bạn của chúng tôi ở đây. Nếu bạn chưa từng thấy chữ ký hàm trước đây, nó sẽ đọc hơi khó hiểu

Hãy áp dụng Array.reduce vào trường hợp sử dụng của chúng ta để tìm phần tử có giá trị lớn nhất trong mảng của chúng ta

const playerWithMostWins = players.reduce[
  [prev, current] => {
    return prev.wins > current.wins ? prev : current
  }
];

Và nếu bạn cần thay đổi logic thành người chơi có ít chiến thắng nhất [vì bức tường xấu hổ?], thì đó là chức năng tương tự nhưng chỉ với một chức năng so sánh khác

Tại sao không mảng. tìm hoặc Toán. tối đa?

const playerWithMostWins = players.reduce[
  [prev, current] => {
    return prev.wins > current.wins ? prev : current
  }
];
0 là một hàm rất hữu ích nhưng chỉ khi bạn có thể xác định xem bạn có đúng mục hay không một cách độc lập với các mục khác trong mảng, e. g. tìm người chơi có tên
const playerWithMostWins = players.reduce[
  [prev, current] => {
    return prev.wins > current.wins ? prev : current
  }
];
1

const leanne = players.find[p => p.name === "Leanne Graham"];

const playerWithMostWins = players.reduce[
  [prev, current] => {
    return prev.wins > current.wins ? prev : current
  }
];
2 có thể được sử dụng nếu bạn chỉ quan tâm đến giá trị thay vì mục chứa giá trị, e. g. tìm số lần thắng tối đa

const mostWins = Math.max[...players.map[[p] => p.wins], 0];

Nhưng hãy nhớ rằng đây là một hoạt động

const playerWithMostWins = players.reduce[
  [prev, current] => {
    return prev.wins > current.wins ? prev : current
  }
];
3, vì vậy bạn vẫn nên sử dụng Array.reduce

Nguyên tắc chung của tôi khi nào tôi cần đạt được Array.reduce là nếu tôi đang sử dụng các từ so sánh trong câu hỏi mà tôi đang cố gắng hỏi. Các từ so sánh phổ biến là nhất, ít nhất, tối đa, thấp nhất, mới nhất, cũ nhất, v.v.

  • Người dùng nào có nhiều người theo dõi nhất?
  • Quảng cáo nào có số lượng nhấp chuột ít nhất?
  • Quỹ nào có năng suất tối đa?
  • Người dùng nào có số lượng bài đăng thấp nhất?
  • Tập tin nào là cũ nhất?
  • Trò chơi nào là mới nhất?

Một trường hợp sử dụng phổ biến đối với tôi khi sử dụng phương pháp Array.reduce này là khi tôi cần điều chỉnh React UI một cách có điều kiện dựa trên các giá trị tương đối của một phần tử

Quay lại ví dụ ban đầu của chúng tôi, khi tôi biết người chơi nào giành được nhiều chiến thắng nhất, tôi có thể đặt biểu tượng cảm xúc chiếc cúp vô cùng quý giá này 🏆 bên cạnh tên của họ

  • Leanne Graham [13]
  • Ervin Howell [8]
  • Clementine Bauch [19] 🏆

Và đây là mã thành phần đầy đủ

________số 8_______

Vì vậy, lần tới khi bạn cần một cách nhanh chóng và dễ dàng để tìm phần tử mảng có nhiều nhất hoặc ít nhất một thứ gì đó, tôi hy vọng bạn sẽ xem xét Array.reduce

Toán học. Hàm max[] thường lấy tất cả các phần tử trong một mảng và xem xét kỹ lưỡng từng giá trị để lấy giá trị lớn nhất. Đó là phương pháp được thảo luận trong ví dụ dưới đây

Bản thử trực tiếp

Thí dụ




đầu ra

55.

2] sắp xếp[]

Sử dụng hàm sắp xếp và so sánh, chúng ta có thể sắp xếp các phần tử trong mảng theo thứ tự giảm dần hoặc tăng dần, sau này sử dụng thuộc tính độ dài, chúng ta có thể tìm thấy giá trị cần thiết

Có nhiều phương pháp để tìm các số nhỏ nhất và lớn nhất trong một mảng JavaScript và hiệu suất của các phương pháp này thay đổi dựa trên số lượng phần tử trong mảng. Hãy thảo luận riêng về từng vấn đề và đưa ra kết quả thử nghiệm cuối cùng

Đối với các mảng thông thường, bạn có thể sử dụng hàm Math. tối đa với ba dấu chấm

let max = Math.max[...arrayOfNumbers];

Toán Javascript. max tìm max trong mảng

hãy để arrayOfNumbers = [4, 12, 62, 70, -10]; . nhật ký [Toán. tối đa [. arrayOfNumbers]];

Sử dụng dấu ba chấm […] giúp dễ dàng gọi bất kỳ hàm nào cần đối số

Toán học. hàm max sử dụng phương thức apply[] để tìm phần tử lớn nhất trong một mảng số

Math.min.apply[Math, testArr];
Math.max.apply[Math, testArr];

Toán Javascript. tối đa. áp dụng tìm phần tử max trong mảng

hãy để arrayOfNumbers = [4, 12, 62, 70, -10]; . nhật ký [Toán. tối đa. áp dụng [Math, arrayOfNumbers]];

Toán tử cũng được sử dụng để lấy giá trị lớn nhất của một mảng. Nó mở rộng một mảng số vào danh sách các đối số, chẳng hạn như với Math. tối thiểu [] và Toán. tối đa[]

Math.min[...testArr];
Math.max[...testArr];

Math.min.apply[Math, testArr];
Math.max.apply[Math, testArr];

Bạn có thể sử dụng vòng lặp tiêu chuẩn cho hàng tấn đối số vì vòng lặp for không có giới hạn về kích thước

let max = testArray[0];
for [let i = 1; i < testArrayLength; ++i] {
  if [testArray[i] > max] {
    max = testArray[i];
  }
}

let min = testArray[0];
for [let i = 1; i < testArrayLength; ++i] {
  if [testArray[i] < min] {
    min = testArray[i];
  }
}

Javascript vòng lặp tiêu chuẩn tìm phần tử tối đa trong mảng

cho arrayList = [1, 2, 3, 4, 3, 21, 0]; . chiều dài; . nhật ký [tối đa];

Bạn cũng có thể sử dụng phương thức reduce[] để lấy số lượng mục

testArr.reduce[function [a, b] {
  return Math.max[a, b];
}];
testArr.reduce[function [a, b] {
  return Math.min[a, b];
}];

Phương thức Javascript reduce[] để lấy số mục tối đa ar tối thiểu

hãy để mảngList = [1, 2, 3, 4, 3, 20, 0]; . giảm [[trước, hiện tại] => { trả về Toán học. max[trước, hiện tại] }]; . nhật ký [maxNum];

Các phương thức áp dụng và trải rộng có giới hạn là 65536 xuất phát từ giới hạn số lượng đối số tối đa. Vào năm 2019, giới hạn là kích thước tối đa của ngăn xếp cuộc gọi, nghĩa là kích thước tối đa cho các số trong trường hợp áp dụng và giải pháp trải rộng là khoảng 120000. Tập lệnh sau sẽ tính toán giới hạn cho môi trường cụ thể của bạn

let testArr = Array.from[{
  length: 10000
}, [] => Math.floor[Math.random[] * 2000000]];
for [i = 10000; i < 1000000; ++i] {
  testArr.push[Math.floor[Math.random[] * 2000000]];
  try {
    Math.max.apply[null, testArr];
  } catch [e] {
    console.log[i];
    break;
  }
}

Khi bạn kiểm tra tất cả các ví dụ đã cho ở trên, kết quả cho thấy vòng lặp tiêu chuẩn là nhanh nhất. Sau đó đến các phương pháp áp dụng và lây lan, sau chúng là giảm, đây là phương pháp chậm nhất. Khi xử lý các mảng lớn có hơn 40 phần tử, toán tử trải rộng được coi là lựa chọn tồi tệ hơn so với các phương thức khác

Làm cách nào để tìm giá trị tối đa trong JavaScript?

Số JavaScript MAX_VALUE . MAX_VALUE trả về số lớn nhất có thể trong JavaScript. Số. MAX_VALUE có giá trị là 1. 7976931348623157e+308

Math MAX[] có hoạt động trên mảng không?

Ví dụ 2. Nhận một giá trị tối đa từ một mảng . The Math. Phương thức max[] so sánh biến max với tất cả các phần tử của mảng và gán giá trị lớn nhất cho max .

Làm cách nào để tìm giá trị tối thiểu trong mảng JavaScript?

Toán. hàm min[] thường lấy tất cả các phần tử trong một mảng và xem xét kỹ lưỡng từng giá trị để lấy giá trị nhỏ nhất.

Có chức năng tối đa trong JavaScript không?

Trong JavaScript, max[] là một hàm được sử dụng để trả về giá trị lớn nhất từ ​​các số được cung cấp dưới dạng tham số . Vì hàm max[] là một hàm tĩnh của đối tượng Math nên nó phải được gọi thông qua đối tượng giữ chỗ có tên là Math.

Chủ Đề