Tìm số nhỏ nhất trong mảng JavaScript

Phương thức

var nums = [1, 2, 3]
Math.min.apply(Math, nums) // 1
Math.max.apply(Math, nums) // 3
Math.min.apply(null, nums) // 1
Math.max.apply(null, nums) // 3
3 sử dụng các số được phân tách bằng dấu phẩy làm đối số, vì vậy chúng ta không thể truyền trực tiếp cho nó một mảng

Chúng tôi đã sử dụng toán tử trải rộng để giải nén các giá trị của mảng và chuyển chúng dưới dạng nhiều đối số được phân tách bằng dấu phẩy cho phương thức

var nums = [1, 2, 3]
Math.min.apply(Math, nums) // 1
Math.max.apply(Math, nums) // 3
Math.min.apply(null, nums) // 1
Math.max.apply(null, nums) // 3
4

Chúng tôi đã sử dụng Mảng. phương thức indexOf để tìm chỉ mục của lần xuất hiện đầu tiên của giá trị

var nums = [1, 2, 3]
Math.min.apply(Math, nums) // 1
Math.max.apply(Math, nums) // 3
Math.min.apply(null, nums) // 1
Math.max.apply(null, nums) // 3
5

Nếu có nhiều phần tử mảng có giá trị là

var nums = [1, 2, 3]
Math.min.apply(Math, nums) // 1
Math.max.apply(Math, nums) // 3
Math.min.apply(null, nums) // 1
Math.max.apply(null, nums) // 3
6, phương thức
var nums = [1, 2, 3]
Math.min.apply(Math, nums) // 1
Math.max.apply(Math, nums) // 3
Math.min.apply(null, nums) // 1
Math.max.apply(null, nums) // 3
7 sẽ trả về chỉ mục của lần xuất hiện đầu tiên

Bạn cũng có thể sử dụng phương pháp

var nums = [1, 2, 3]
Math.min.apply(Math, nums) // 1
Math.max.apply(Math, nums) // 3
Math.min.apply(null, nums) // 1
Math.max.apply(null, nums) // 3
8 thay thế cho chênh lệch (. ) nhà điều hành

Sự khác biệt duy nhất trong mã là cách chúng tôi lấy giá trị tối thiểu trong mảng

Các đối số chúng tôi đã truyền cho Hàm. áp dụng phương pháp là

  1. đối số
    var nums = [1, 2, 3]
    Math.min.apply(Math, nums) // 1
    Math.max.apply(Math, nums) // 3
    Math.min.apply(null, nums) // 1
    Math.max.apply(null, nums) // 3
    9 - đối với mục đích của chúng tôi, nó không liên quan
  2. mảng có các giá trị sẽ được chuyển đến phương thức
    var nums = [1, 2, 3]
    Math.min.apply(Math, nums) // 1
    Math.max.apply(Math, nums) // 3
    Math.min.apply(null, nums) // 1
    Math.max.apply(null, nums) // 3
    3 dưới dạng nhiều đối số được phân tách bằng dấu phẩy

Về cơ bản, phương thức

const nums = [1, 2, 3]
Math.min(...nums) // 1
Math.max(...nums) // 3
11 giải nén các giá trị của mảng và chuyển chúng dưới dạng nhiều đối số cho hàm mà phương thức được gọi

Nhưng nếu chúng ta có mảng số và chúng ta muốn tìm giá trị tối thiểu và tối đa trong đó thì sao?. Nếu chúng ta gửi một mảng tới Math. phút hoặc Toán. max chúng ta sẽ nhận được NaN

const nums = [1, 2, 3]
Math.min(nums) // NaN
Math.max(nums) // Nan

Đó là bởi vì môn Toán. phút hoặc Toán. các hàm tối đa mong đợi các biến riêng biệt và không phải là một mảng. Vì vậy, để làm được điều đó trước khi sử dụng phương thức áp dụng ES6/ES2015

var nums = [1, 2, 3]
Math.min.apply(Math, nums) // 1
Math.max.apply(Math, nums) // 3
Math.min.apply(null, nums) // 1
Math.max.apply(null, nums) // 3

Với ES6/ES2016, nhiệm vụ phá hủy sẽ trở nên dễ dàng hơn

Cú pháp gán phá hủy là một biểu thức JavaScript cho phép trích xuất dữ liệu từ các mảng hoặc đối tượng thành các biến riêng biệt

const nums = [1, 2, 3]
Math.min(...nums) // 1
Math.max(...nums) // 3

… phía trước mảng sẽ chuyển đổi mảng thành các biến riêng biệt và gửi chúng đến hàm, tương đương với

JavaScript cung cấp một số cách để tìm số nhỏ nhất và số lớn nhất trong danh sách, bao gồm các hàm Toán học tích hợp sẵn và sắp xếp mảng theo số. Tôi so sánh hiệu suất của 5 phương thức sử dụng jsPerf — và toán tử trải rộng thua

Hàm

var nums = [1, 2, 3]
Math.min.apply(Math, nums) // 1
Math.max.apply(Math, nums) // 3
Math.min.apply(null, nums) // 1
Math.max.apply(null, nums) // 3
4 trả về số nhỏ nhất trong số các số được cung cấp dưới dạng tham số đầu vào hoặc
const nums = [1, 2, 3]
Math.min(...nums) // 1
Math.max(...nums) // 3
3 nếu không có tham số nào

Thử nó

cú pháp

Math.min()
Math.min(value0)
Math.min(value0, value1)
Math.min(value0, value1, /* … ,*/ valueN)

Thông số

const nums = [1, 2, 3]
Math.min(...nums) // 1
Math.max(...nums) // 3
4, …,
const nums = [1, 2, 3]
Math.min(...nums) // 1
Math.max(...nums) // 3
5

Không hoặc nhiều số trong đó giá trị thấp nhất sẽ được chọn và trả về

Giá trị trả về

Số nhỏ nhất trong các số đã cho. Trả về

const nums = [1, 2, 3]
Math.min(...nums) // 1
Math.max(...nums) // 3
6 nếu bất kỳ tham số nào hoặc được chuyển đổi thành
const nums = [1, 2, 3]
Math.min(...nums) // 1
Math.max(...nums) // 3
6. Trả về
const nums = [1, 2, 3]
Math.min(...nums) // 1
Math.max(...nums) // 3
3 nếu không có tham số nào được cung cấp

Sự mô tả

Bởi vì

const x = 10;
const y = -20;
const z = Math.min(x, y); // -20
1 là một phương thức tĩnh của
const x = 10;
const y = -20;
const z = Math.min(x, y); // -20
2, bạn luôn sử dụng nó như là một
var nums = [1, 2, 3]
Math.min.apply(Math, nums) // 1
Math.max.apply(Math, nums) // 3
Math.min.apply(null, nums) // 1
Math.max.apply(null, nums) // 3
4, chứ không phải là một phương thức của một đối tượng
const x = 10;
const y = -20;
const z = Math.min(x, y); // -20
2 mà bạn đã tạo (
const x = 10;
const y = -20;
const z = Math.min(x, y); // -20
2 không phải là hàm tạo)

const x = 10;
const y = -20;
const z = Math.min(x, y); // -20
6 là 2, báo hiệu yếu rằng nó được thiết kế để xử lý ít nhất hai tham số

ví dụ

Sử dụng toán học. phút()

Điều này tìm thấy min của

const x = 10;
const y = -20;
const z = Math.min(x, y); // -20
7 và
const x = 10;
const y = -20;
const z = Math.min(x, y); // -20
8 và gán nó cho
const x = 10;
const y = -20;
const z = Math.min(x, y); // -20
9

const x = 10;
const y = -20;
const z = Math.min(x, y); // -20

Cắt một giá trị bằng Math. phút()

var nums = [1, 2, 3]
Math.min.apply(Math, nums) // 1
Math.max.apply(Math, nums) // 3
Math.min.apply(null, nums) // 1
Math.max.apply(null, nums) // 3
4 thường được sử dụng để cắt bớt một giá trị sao cho nó luôn nhỏ hơn hoặc bằng một ranh giới. Ví dụ, điều này