每天學習10個實用Javascript代碼片段(三)

每天學習10個實用Javascript代碼片段,加深對 Javascript 語法的理解,積累代碼優化經驗,第天繼續,如果覺得內容能夠帶來點幫助,可以查看過去的內容《每天學習 10 個實用 Javascript 代碼片段(二)》其他內容,又或者有用到的需求片段,不妨在留言區留言。

1. isCheck

此代碼片段用于檢查值是否屬于某個數據類型。

const isCheck = (type, val) =>
    ![undefined, null].includes(val) && val.constructor === type;

console.log(isCheck(Array, ["a"])); // true
console.log(isCheck(Object, {})); // true
console.log(isCheck(ArrayBuffer, new ArrayBuffer())); // true
console.log(isCheck(Boolean, new Boolean(true))); // true
console.log(isCheck(RegExp, /./g)); // true
console.log(isCheck(Number, 0)); // true

2. indexOfAll

此代碼片段用于查找數組中包含元素的所有索引值,返回索引值組成的數組,沒有則返回空數組。

const indexOfAll = (array, val) =>
    array.reduce(
        (acc, current, index) => (current === val ? [...acc, index] : acc),
        []
    );
const testArray = ["devpoint", "devtest", "javascript", "devtest"];
console.log(indexOfAll(testArray, "devtest")); // [ 1, 3 ]

3. redirectHttps

此代碼片段從前端強制跳轉到 https,當然實際上一般在服務器端強制跳轉。

const redirectHttps = () => {
    location.protocol !== "https:" &&
        location.replace("https://" + location.href.split("http://")[1]);
};

4. isBrowser

此代碼片段用于檢測當前運行環境是否為瀏覽器環境,以避免在 Node 環境上運行前端模塊時出錯。

const isBrowser = () => ![typeof window, typeof document].includes("undefined");

console.log(isBrowser()); // false

5. isNil

此代碼片段用于檢查數據是否為 null 或是 undefined

const isNil = (val) => val === undefined || val === null;

const testObj = {
    title: "devpoint",
};
console.log(isNil(null)); // true
console.log(isNil(undefined)); // true
console.log(isNil(testObj.age)); // true

6. isNumber

此代碼片段用于檢查數據是否為數字。

const isNumber = (num) => {
    return !isNaN(parseFloat(num)) && isFinite(num);
};
const testObj = {
    title: "devpoint",
};
console.log(isNumber(testObj.age)); // false
console.log(isNumber("1a")); // false
console.log(isNumber(1)); // true

7. isValidJSON

此代碼片段用于檢查字符串是否為有效的 JSON 字符串,對于需要處理JSON數據的需求來說這個驗證很有必要。

const isValidJSON = (str) => {
    try {
        JSON.parse(str);
        return true;
    } catch (e) {
        return false;
    }
};

console.log(isValidJSON('{"name":"devpoint","age":30}')); // true
console.log(isValidJSON(null)); // true

8. minArray

此代碼片段返回數組中的 n 個最小元素,即將數據按照從小到大排序,取前面 n 個元素組成 n 個最小元素數組。

const minArray = (array, n = 1) => [...array].sort((a, b) => a - b).slice(0, n);

const testArray = [10, 2, 3, 30, 9];
console.log(minArray(testArray)); // [2]
console.log(minArray(testArray, 2)); // [ 2, 3 ]
console.log(minArray(testArray, 3)); // [ 2, 3, 9 ]

9. maxArray

此代碼片段正好與上面的 minArray 相反,返回數組中的 n 個最大元素,即將數據按照從大到小排序,取前面 n 個元素組成 n 個最大元素數組。

const maxArray = (array, n = 1) => [...array].sort((a, b) => b - a).slice(0, n);

const testArray = [10, 2, 3, 30, 9];
console.log(maxArray(testArray)); // [ 30 ]
console.log(maxArray(testArray, 2)); // [ 30, 10 ]
console.log(maxArray(testArray, 3)); // [ 30, 10, 9 ]

10. adornFilter

此代碼片段實現了一個修飾過濾器,用于定義過濾函數。

const adornFilter = (fn) => (...args) => fn(...args);

const testArray = [1, 22, 31, 49, 56, 86];

console.log(testArray.filter(adornFilter((item) => item % 2 === 0))); // [22, 56, 86];
console.log(testArray.filter(adornFilter((item) => item > 40))); // [ 49, 56, 86 ]