Hàm đệ quy JavaScript mảng lồng nhau

Sử dụng phương thức concat() và push() với vòng lặp for để lấy mảng Flatten trong đệ quy JavaScript. Giải pháp dưới đây sử dụng mảng. concat(…) để kết hợp cả kết quả của đệ quy (đi xuống cây), nhưng cũng để kết hợp kết quả xử lý phần còn lại của danh sách (ở cùng cấp độ)

Làm phẳng mảng đệ quy JavaScript

Mã ví dụ đơn giản khi gọi đệ quy flatten, bạn cần chuyển arr[i] cho nó và sau đó nối kết quả với newArr

Làm phẳng các mảng lồng nhau trong khi vẫn giữ nguyên thứ tự, e. g. [[1, 2], 3, [4, [[5]]]] nên được chuyển đổi thành [1, 2, 3, 4, 5]





  


 

đầu ra

Hàm đệ quy JavaScript mảng lồng nhau

Đây là một phiên bản hiện đại hơn

function flatten(items) {
  const flat = [];

  items.forEach(item => {
    if (Array.isArray(item)) {
      flat.push(...flatten(item));
    } else {
      flat.push(item);
    }
  });

  return flat;
}

Cách rõ ràng để làm phẳng một Array vào năm 2019 với ES6 là flat()

const array = [1, 1, [2, 2], [[3, [4], 3], 2]]

// All layers
array.flat(Infinity) // [1, 1, 2, 2, 3, 4, 3, 2]

// Varying depths
array.flat() // [1, 1, 2, 2, Array(3), 2]

array.flat(2) // [1, 1, 2, 2, 3, Array(1), 3, 2]
array.flat().flat() // [1, 1, 2, 2, 3, Array(1), 3, 2]

array.flat(3) // [1, 1, 2, 2, 3, 4, 3, 2]
array.flat().flat().flat() // [1, 1, 2, 2, 3, 4, 3, 2]

Hãy bình luận nếu bạn có bất kỳ nghi ngờ hoặc đề xuất nào về chủ đề Mảng JS này

Ghi chú. Tất cả mã Ví dụ về JS đều được thử nghiệm trên trình duyệt Firefox và trình duyệt Chrome

hệ điều hành. cửa sổ 10

Mã số. Phiên bản HTML5

Hàm đệ quy JavaScript mảng lồng nhau

Rohit

Bằng cấp về Khoa học Máy tính và Kỹ sư. Nhà phát triển ứng dụng và có kinh nghiệm về nhiều ngôn ngữ lập trình. Đam mê công nghệ & thích học hỏi kỹ thuật

Tìm kiếm đệ quy là một kỹ thuật duyệt cấu trúc dữ liệu và tìm kiếm một phần tử hoặc nhiều phần tử phù hợp với một điều kiện cụ thể. Trong JavaScript, điều này có thể đặc biệt hữu ích khi làm việc với các mảng đối tượng

Một trường hợp sử dụng phổ biến cho tìm kiếm đệ quy là tìm một đối tượng trong một mảng có giá trị thuộc tính cụ thể. Trong bài viết này, chúng ta sẽ thảo luận về cách thực hiện tìm kiếm đệ quy trong một mảng các đối tượng

 

Ví dụ 1. Tìm kiếm đệ quy trong một mảng các đối tượng

Ví dụ, hãy xem xét một mảng các đối tượng đại diện cho danh sách nhân viên trong một tổ chức. Mỗi đối tượng có thể có các thuộc tính như name, titledepartment. Nếu chúng tôi muốn tìm tất cả nhân viên trong bộ phận marketing, chúng tôi có thể sử dụng tìm kiếm đệ quy để lặp qua mảng và trả về một mảng mới chỉ chứa các đối tượng có thuộc tính department bằng với

const employees = [
    { name: "Alice", title: "Manager", department: "Marketing" },
    { name: "Bob", title: "Developer", department: "Engineering" },
    { name: "Charlie", title: "Manager", department: "Marketing" },
    { name: "Dave", title: "Designer", department: "Design" },
];

const marketingEmployees = search(
    employees,
    (employee) => employee.department === "Marketing"
);

console.log(marketingEmployees);
0

Để triển khai tìm kiếm đệ quy trong JavaScript, chúng ta có thể sử dụng hàm nhận hai đối số. mảng để tìm kiếm và điều kiện chúng tôi muốn so khớp. Trước tiên, hàm nên kiểm tra xem mảng có trống không; . Nếu mảng không rỗng, hàm sẽ lấy phần tử đầu tiên trong mảng và kiểm tra xem nó có thỏa mãn điều kiện không. Nếu có, nó sẽ thêm phần tử đó vào mảng kết quả. Nếu không, nó sẽ gọi chính nó với các phần tử còn lại trong mảng

CŨNG ĐỌC. Làm cách nào để kiểm tra đối tượng có Thuộc tính trong JavaScript không?

Dưới đây là một ví dụ về hàm tìm kiếm đệ quy tìm tất cả các đối tượng trong một mảng có thuộc tính department bằng với

const employees = [
    { name: "Alice", title: "Manager", department: "Marketing" },
    { name: "Bob", title: "Developer", department: "Engineering" },
    { name: "Charlie", title: "Manager", department: "Marketing" },
    { name: "Dave", title: "Designer", department: "Design" },
];

const marketingEmployees = search(
    employees,
    (employee) => employee.department === "Marketing"
);

console.log(marketingEmployees);
0

function search(array, condition) {
    if (array.length === 0) {
        return [];
    }
    const [head, ...tail] = array;
    if (condition(head)) {
        return [head, ...search(tail, condition)];
    }
    return search(tail, condition);
}

Hàm này hoạt động bằng cách sử dụng cú pháp gán hàm hủy để trích xuất phần tử đầu tiên trong mảng (

const employees = [
    { name: "Alice", title: "Manager", department: "Marketing" },
    { name: "Bob", title: "Developer", department: "Engineering" },
    { name: "Charlie", title: "Manager", department: "Marketing" },
    { name: "Dave", title: "Designer", department: "Design" },
];

const marketingEmployees = search(
    employees,
    (employee) => employee.department === "Marketing"
);

console.log(marketingEmployees);
3) và các phần tử còn lại (
const employees = [
    { name: "Alice", title: "Manager", department: "Marketing" },
    { name: "Bob", title: "Developer", department: "Engineering" },
    { name: "Charlie", title: "Manager", department: "Marketing" },
    { name: "Dave", title: "Designer", department: "Design" },
];

const marketingEmployees = search(
    employees,
    (employee) => employee.department === "Marketing"
);

console.log(marketingEmployees);
4). Sau đó, nó sẽ kiểm tra xem phần tử
const employees = [
    { name: "Alice", title: "Manager", department: "Marketing" },
    { name: "Bob", title: "Developer", department: "Engineering" },
    { name: "Charlie", title: "Manager", department: "Marketing" },
    { name: "Dave", title: "Designer", department: "Design" },
];

const marketingEmployees = search(
    employees,
    (employee) => employee.department === "Marketing"
);

console.log(marketingEmployees);
3 có khớp với điều kiện hay không bằng cách sử dụng hàm
const employees = [
    { name: "Alice", title: "Manager", department: "Marketing" },
    { name: "Bob", title: "Developer", department: "Engineering" },
    { name: "Charlie", title: "Manager", department: "Marketing" },
    { name: "Dave", title: "Designer", department: "Design" },
];

const marketingEmployees = search(
    employees,
    (employee) => employee.department === "Marketing"
);

console.log(marketingEmployees);
6 được cung cấp. Nếu có, nó sẽ thêm nó vào mảng kết quả bằng cách sử dụng toán tử trải rộng (
const employees = [
    { name: "Alice", title: "Manager", department: "Marketing" },
    { name: "Bob", title: "Developer", department: "Engineering" },
    { name: "Charlie", title: "Manager", department: "Marketing" },
    { name: "Dave", title: "Designer", department: "Design" },
];

const marketingEmployees = search(
    employees,
    (employee) => employee.department === "Marketing"
);

console.log(marketingEmployees);
7). Nếu không, nó chỉ đơn giản gọi chính nó với các phần tử còn lại trong mảng

Để sử dụng hàm này, chúng ta có thể truyền vào một mảng các đối tượng và một hàm kiểm tra thuộc tính department của từng đối tượng

const employees = [
    { name: "Alice", title: "Manager", department: "Marketing" },
    { name: "Bob", title: "Developer", department: "Engineering" },
    { name: "Charlie", title: "Manager", department: "Marketing" },
    { name: "Dave", title: "Designer", department: "Design" },
];

const marketingEmployees = search(
    employees,
    (employee) => employee.department === "Marketing"
);

console.log(marketingEmployees);

đầu ra

Quảng cáo

[
  { name: 'Alice', title: 'Manager', department: 'Marketing' },
  { name: 'Charlie', title: 'Manager', department: 'Marketing' }
]

Chức năng tìm kiếm đệ quy này có thể hữu ích trong nhiều tình huống khác nhau khi bạn cần tìm các phần tử cụ thể trong một mảng đối tượng. Đây là một cách đơn giản và hiệu quả để lọc một mảng bằng cách sử dụng một điều kiện tùy chỉnh

CŨNG ĐỌC. Thuộc tính textContent JavaScript

 

Ví dụ-2. Tìm kiếm mảng đối tượng lồng nhau bằng cách sử dụng Array. nguyên mẫu. phương thức tìm()

Để tìm một giá trị cụ thể trong một mảng các đối tượng lồng nhau trong JavaScript, chúng ta có thể sử dụng phương thức

const employees = [
    { name: "Alice", title: "Manager", department: "Marketing" },
    { name: "Bob", title: "Developer", department: "Engineering" },
    { name: "Charlie", title: "Manager", department: "Marketing" },
    { name: "Dave", title: "Designer", department: "Design" },
];

const marketingEmployees = search(
    employees,
    (employee) => employee.department === "Marketing"
);

console.log(marketingEmployees);
9. Phương thức
[
  { name: 'Alice', title: 'Manager', department: 'Marketing' },
  { name: 'Charlie', title: 'Manager', department: 'Marketing' }
]
0 trả về giá trị của phần tử đầu tiên trong mảng thỏa mãn hàm kiểm tra được cung cấp

Dưới đây là một ví dụ về việc sử dụng phương thức

[
  { name: 'Alice', title: 'Manager', department: 'Marketing' },
  { name: 'Charlie', title: 'Manager', department: 'Marketing' }
]
0 để tìm một đối tượng có giá trị cụ thể trong một mảng các đối tượng lồng nhau

let nestedArray = [
    {
        id: 1,
        name: "Amit",
        children: [
            {
                id: 2,
                name: "Sanjeev",
                children: [
                    {
                        id: 3,
                        name: "Pooja"
                    },
                    {
                        id: 4,
                        name: "Rahul"
                    }
                ]
            },
            {
                id: 5,
                name: "Arpita"
            }
        ]
    },
    {
        id: 6,
        name: "Kapil",
        children: [
            {
                id: 7,
                name: "Rakhi"
            }
        ]
    }
];

let findValue = (arr, val) => {
    for(let obj of arr){
        if (obj.name === val) {
            return obj;
        }
        if(obj.children){
            let result = findValue(obj.children, val);
            if (result) {
                return result;
            }
        }
    }
    return undefined;
};


let result = findValue(nestedArray, "Rahul");
console.log(result); 
// Outputs: { id: 4, name: "Rahul" }

Trong ví dụ này, hàm sử dụng vòng lặp for để lặp qua mảng và kiểm tra xem tên của đối tượng có bằng với giá trị được truyền vào là

[
  { name: 'Alice', title: 'Manager', department: 'Marketing' },
  { name: 'Charlie', title: 'Manager', department: 'Marketing' }
]
2 hay không, nếu đúng, nó sẽ trả về đối tượng. Nếu đối tượng có khóa con, nó sẽ gọi đệ quy hàm
[
  { name: 'Alice', title: 'Manager', department: 'Marketing' },
  { name: 'Charlie', title: 'Manager', department: 'Marketing' }
]
3 với mảng con là tham số đầu tiên và val là tham số thứ hai. Nó sử dụng câu lệnh if other để kiểm tra xem đệ quy có trả về một đối tượng hay không và nếu có thì nó sẽ trả về đối tượng

CŨNG ĐỌC. Tạo mảng số trong phạm vi JavaScript [GIẢI QUYẾT]

Hàm này sẽ kiểm tra tất cả các phần tử của mảng và kiểm tra đệ quy tất cả các mảng con cho đến khi tìm thấy đối tượng đầu tiên khớp với giá trị đã chỉ định

 

Ví dụ-3. Thực hiện tìm kiếm đệ quy sử dụng giá trị chỉ mục

Trong JavaScript, bạn có thể thực hiện tìm kiếm đệ quy trong một mảng các đối tượng bằng cách xác định một hàm lấy mảng, chỉ mục hiện tại và mục đích làm tham số của nó. Trong hàm, bạn có thể sử dụng trường hợp cơ sở để kiểm tra xem chỉ số hiện tại có lớn hơn hoặc bằng độ dài của mảng hay không và nếu có, hãy trả về "______12_______4. " Nếu không, bạn có thể kiểm tra xem mục hiện tại trong chỉ mục có bằng mục đích hay không và nếu đúng như vậy, hãy trả lại mục hiện tại. Nếu mục hiện tại không bằng mục đích, bạn có thể gọi lại hàm với chỉ mục tiếp theo và trả về kết quả

Đây là một chức năng đơn giản

function recursiveSearch(arr, target) {
    for (let i = 0; i < arr.length; i++) {
        if (arr[i].id === target.id) {
            return arr[i];
        }
        if (arr[i].children) {
            const result = recursiveSearch(arr[i].children, target);
            if (result) {
                return result;
            }
        }
    }
    return null;
}

const data = [
    { id: 1, name: "Rahul", children: [
        { id: 2, name: "Ravi" },
        { id: 3, name: "Anurag", children: [
            { id: 4, name: "Rohit" },
            { id: 5, name: "Rakhi" }
        ] }
    ] },
    { id: 6, name: "Bob" }
];

const result = recursiveSearch(data, {id: 4, name: "Rohit"});
console.log(result);
// Output: { id: 4, name: "Rohit" }

Trong ví dụ này, hàm

[
  { name: 'Alice', title: 'Manager', department: 'Marketing' },
  { name: 'Charlie', title: 'Manager', department: 'Marketing' }
]
5 nhận vào một mảng các đối tượng lồng nhau và một đối tượng đích để tìm kiếm. Hàm sử dụng vòng lặp for để lặp qua mảng cấp cao nhất, kiểm tra xem id của đối tượng hiện tại có khớp với id đích không. Nếu khớp, nó sẽ trả về đối tượng hiện tại. Nếu không, nó sẽ kiểm tra xem đối tượng hiện tại có thuộc tính con hay không và nếu có, nó sẽ gọi lại hàm recursiveSearch, chuyển mảng con của đối tượng hiện tại và đối tượng đích. Quá trình này tiếp tục đệ quy cho đến khi tìm thấy đối tượng mục tiêu hoặc tất cả các đối tượng đã được kiểm tra

Quảng cáo

 

CŨNG ĐỌC. Làm cách nào để sử dụng JavaScript parseFloat()?

Tóm lược

Tóm lại, tìm kiếm đệ quy là một kỹ thuật duyệt qua một mảng các đối tượng và trả về một mảng mới chỉ chứa các phần tử thỏa mãn một điều kiện cụ thể. Nó có thể được triển khai trong JavaScript bằng cách sử dụng một hàm nhận một mảng và một điều kiện, rồi gọi đệ quy chính nó với các phần tử còn lại trong mảng cho đến khi nó tìm kiếm toàn bộ mảng. Đây là một công cụ mạnh mẽ để lọc và thao tác dữ liệu và có thể hữu ích trong nhiều ngữ cảnh khác nhau khi bạn cần trích xuất thông tin cụ thể từ một cấu trúc dữ liệu phức tạp

Làm cách nào để làm phẳng đệ quy một mảng JavaScript?

Có vài cách để thực hiện việc này. .
sử dụng phương pháp phẳng và từ khóa Infinity. const phẳng = mảng. phẳng (Vô cực);
Bạn có thể làm phẳng bất kỳ mảng nào bằng cách sử dụng các phương thức giảm và nối như thế này. chức năng làm phẳng (mảng) { trả lại mảng. giảm ((acc, cur) => acc. concat(Mảng. isArray(cur)?

Làm cách nào để làm phẳng mảng đối tượng lồng nhau trong javascript?

Bạn sử dụng phương thức flat() để nối các mảng con theo cách đệ quy thành một mảng . Phương thức phẳng () lấy một giá trị độ sâu làm tham số của nó, giá trị này là tùy chọn tùy thuộc vào độ sâu của mảng bạn muốn làm phẳng (nối). Phương thức phẳng () mặc định lấy 1 làm độ sâu.

Làm cách nào để sử dụng hàm đệ quy trong JavaScript?

Đệ quy là một quá trình gọi chính nó. Hàm gọi chính nó được gọi là hàm đệ quy. Cú pháp của hàm đệ quy là. hàm recurse() { // mã hàm recurse();

Làm cách nào để tạo mảng đơn từ mảng lồng nhau trong JavaScript?

Để chuyển đổi một mảng nhiều chiều hoặc mảng lồng nhau thành một mảng đơn hoặc làm phẳng mảng, chúng ta có thể sử dụng phương thức flat() có sẵn trong mảng . Giả sử bạn có một mảng lồng nhau như thế này, // mảng lồng nhau let arr = ["John Doe", ["Lily Rose", 23]];