Bài viết này hướng dẫn tìm bằng tiêu đề (chuỗi kí tự) trong mảng JavaScript, có thể sử dụng tiếng Việt có dấu.

Tìm kiếm bằng tiêu đề trong mảng JavaScript

Ví dụ ta có mảng các bài viết như sau.

var arr = [
        {title: '101 Lần Đoạt Hôn 101 Lần Đoạt Hôn', img: 'img1.jpg', chap: 'Chap 16'},
        {title: '101 Mỹ Nam Của Vương Phi Béo Phì', img: 'img2.jpg', chap: 'Chap 26'},
        {title: '101 Phương Pháp Của Tổng Tài', img: 'img3.jpg', chap: 'Chap 1'},
        {title: '99 Phương Pháp Giam Cầm Tình Yêu', img: 'img4.jpg', chap: 'Chap 5'},
        {title: '999 Nụ Hôn Bá Đạo Của Nam Thần', img: 'img5.jpg', chap: 'Chap 73'},
        {title: 'Ác Ma Bá Yêu', img: 'img6.jpg', chap: 'Chap 42'}
    ];

Để tìm được tiếng Việt có dấu, đầu tiên ta cần phương thức chuyển tất cả về không dấu.

function removeAccents(str) {
    var accentsMap = [
        "aàảãáạăằẳẵắặâầẩẫấậ",
        "AÀẢÃÁẠĂẰẲẴẮẶÂẦẨẪẤẬ",
        "dđ", "DĐ",
        "eèẻẽéẹêềểễếệ",
        "EÈẺẼÉẸÊỀỂỄẾỆ",
        "iìỉĩíị",
        "IÌỈĨÍỊ",
        "oòỏõóọôồổỗốộơờởỡớợ",
        "OÒỎÕÓỌÔỒỔỖỐỘƠỜỞỠỚỢ",
        "uùủũúụưừửữứự",
        "UÙỦŨÚỤƯỪỬỮỨỰ",
        "yỳỷỹýỵ",
        "YỲỶỸÝỴ"    
    ];

    for (var i = 0; i < accentsMap.length; i++) {
        var re = new RegExp('[' + accentsMap[i].substr(1) + ']', 'g');
        var char = accentsMap[i][0];
        str = str.replace(re, char);
    }
    
    return str;
}

Tìm kiếm như sau.

var found = [];
var foundLimit = 15; // Giới hạn số lượng kết quả
var foundCount = 1; // Đếm số kết quả
var minStrLength = 3; // Nhập ít nhất 3 kí tự

for (var i = 0; i < arr.length; i++) {
    var sto2Search = 'nam thần';
    if (foundCount <= foundLimit && !(sto2Search.length < minStrLength)) {
        if (removeAccents(arr[i]['title']).toLowerCase().includes(removeAccents(sto2Search.toLowerCase()))) {
            found.unshift(arr[i]);
            foundCount++;
        }
    }
}

document.write(JSON.stringify(found));

Chúc các bạn thành công!