Hướng dẫn how do i partition an array in javascript? - làm cách nào để phân vùng một mảng trong javascript?

Tôi đã thêm giải pháp này vào jspref của @dystroy tại đây và nó dường như chạy nhanh gấp đôi so với các giải pháp khác. Chỉnh sửa: Trong Safari & Chrome nhưng không phải FirefoxEdit: in Safari & Chrome but not Firefox

Dưới đây là giải pháp phong cách chức năng để thêm vào sự kết hợp của các câu trả lời ở đây.

Đây là một hàm bậc cao hơn gọi là

function toPartitions ( size ) {
    var partition = [];
    return function ( acc, v ) {
        partition.push( v );
        if ( partition.length === size ) {
            acc.push( partition );
            partition = [];
        }
        return acc;
    };
}
3 trả về một cuộc gọi lại cho phương thức giảm của UnderCore hoặc phương thức giảm mảng gốc.

Ví dụ sử dụng:

[1,2,3,4,5,6,7,8,9].reduce( toPartitions( 3 ), [] );

Chức năng:

function toPartitions ( size ) {
    var partition = [];
    return function ( acc, v ) {
        partition.push( v );
        if ( partition.length === size ) {
            acc.push( partition );
            partition = [];
        }
        return acc;
    };
}

Giống như phân vùng của Clojure, nó sẽ không bao gồm phân vùng đuôi khi không có đủ các yếu tố.

Trong ví dụ của bạn, bạn có thể làm:

arrayALLPartionned = arrayAll.reduce( toPartitions( 3 ), [] ) );

Nếu bạn không muốn sử dụng điều này với

function toPartitions ( size ) {
    var partition = [];
    return function ( acc, v ) {
        partition.push( v );
        if ( partition.length === size ) {
            acc.push( partition );
            partition = [];
        }
        return acc;
    };
}
4, nhưng chỉ có một hàm có một mảng và kích thước phân vùng bạn có thể làm:

function partition ( arr, size ) {
    return arr.reduce( toPartitions( size ), [] );
}

Do đó, giải pháp sẽ chỉ là:

arrayALLPartionned = partition( arrayAll, 3 );

Trong bài viết này, chúng tôi sẽ trải qua cách phân vùng một mảng dựa trên điều kiện chỉ sử dụng dòng mã trong JavaScript. Đây là đoạn mã JavaScript một dòng sử dụng một trong những tính năng ES6 phổ biến nhất =>

function toPartitions ( size ) {
    var partition = [];
    return function ( acc, v ) {
        partition.push( v );
        if ( partition.length === size ) {
            acc.push( partition );
            partition = [];
        }
        return acc;
    };
}
5.

Hãy xác định chức năng ngắn này:

const partition = (arr, criteria) => arr.reduce((acc, i) => (acc[criteria(i) ? 0 : 1].push(i), acc), [[], []]);

#Example

partition([1, 2, 3, 4, 5], n => n % 2);     // [[2, 4], [1, 3, 5]]

Sử dụng hàm mảng.

let large = [12, 5, 8, 130, 44].filter((x) => x > 10);
let small = [12, 5, 8, 130, 44].filter((x) => !(x > 10));

Tuy nhiên, trong ví dụ trên, tôi lặp đi lặp lại mảng hai lần và thực hiện cùng một bài kiểm tra mỗi lần. Có cách nào đơn giản để tạo ra cả 'lớn' và 'nhỏ' trong một lần vượt qua mảng không? Cụ thể, nếu cuộc gọi lại để đánh giá xem một phần tử có nên được giữ không, tôi muốn tránh gọi nó hai lần.

Giới thiệu

Mảng là một trong những cấu trúc được sử dụng nhiều nhất trong lập trình JavaScript, đó là lý do tại sao điều quan trọng là phải biết các phương pháp tích hợp của nó như mặt sau túi của bạn.

Trong hướng dẫn này, chúng ta sẽ xem cách chia một mảng thành các khối có kích thước

function toPartitions ( size ) {
    var partition = [];
    return function ( acc, v ) {
        partition.push( v );
        if ( partition.length === size ) {
            acc.push( partition );
            partition = [];
        }
        return acc;
    };
}
6 trong JavaScript.

Cụ thể, chúng ta sẽ xem xét hai cách tiếp cận:

  1. Sử dụng phương pháp
    function toPartitions ( size ) {
        var partition = [];
        return function ( acc, v ) {
            partition.push( v );
            if ( partition.length === size ) {
                acc.push( partition );
                partition = [];
            }
            return acc;
        };
    }
    
    7 và vòng lặp
    function toPartitions ( size ) {
        var partition = [];
        return function ( acc, v ) {
            partition.push( v );
            if ( partition.length === size ) {
                acc.push( partition );
                partition = [];
            }
            return acc;
        };
    }
    
    8
  2. Sử dụng phương thức
    function toPartitions ( size ) {
        var partition = [];
        return function ( acc, v ) {
            partition.push( v );
            if ( partition.length === size ) {
                acc.push( partition );
                partition = [];
            }
            return acc;
        };
    }
    
    9 và vòng lặp
    arrayALLPartionned = arrayAll.reduce( toPartitions( 3 ), [] ) );
    
    0

Chia mảng thành các khối thậm chí bằng phương thức Slice ()

Cách dễ nhất để trích xuất một đoạn của một mảng, hay đúng hơn là cắt nó lên, là phương pháp

function toPartitions ( size ) {
    var partition = [];
    return function ( acc, v ) {
        partition.push( v );
        if ( partition.length === size ) {
            acc.push( partition );
            partition = [];
        }
        return acc;
    };
}
7:

arrayALLPartionned = arrayAll.reduce( toPartitions( 3 ), [] ) );
2 - Trả về một phần của mảng được gọi, giữa các chỉ số
arrayALLPartionned = arrayAll.reduce( toPartitions( 3 ), [] ) );
3 và
arrayALLPartionned = arrayAll.reduce( toPartitions( 3 ), [] ) );
4.

Lưu ý: Cả

arrayALLPartionned = arrayAll.reduce( toPartitions( 3 ), [] ) );
3 và
arrayALLPartionned = arrayAll.reduce( toPartitions( 3 ), [] ) );
4 có thể là số nguyên âm, chỉ biểu thị rằng chúng được liệt kê từ cuối mảng.
arrayALLPartionned = arrayAll.reduce( toPartitions( 3 ), [] ) );
7 là yếu tố cuối cùng của mảng,
arrayALLPartionned = arrayAll.reduce( toPartitions( 3 ), [] ) );
8 là người tiếp theo cuối cùng, v.v.
Both
arrayALLPartionned = arrayAll.reduce( toPartitions( 3 ), [] ) );
3 and
arrayALLPartionned = arrayAll.reduce( toPartitions( 3 ), [] ) );
4 can be negative integers, which just denotes that they're enumerated from the end of the array.
arrayALLPartionned = arrayAll.reduce( toPartitions( 3 ), [] ) );
7 being the last element of the array,
arrayALLPartionned = arrayAll.reduce( toPartitions( 3 ), [] ) );
8 being the next to last and so on...

Mảng được trả về bởi

function toPartitions ( size ) {
    var partition = [];
    return function ( acc, v ) {
        partition.push( v );
        if ( partition.length === size ) {
            acc.push( partition );
            partition = [];
        }
        return acc;
    };
}
7 trả về một bản sao nông, có nghĩa là bất kỳ tài liệu tham khảo nào trong mảng gốc sẽ được sao chép qua AS-IS và sẽ không phân bổ bộ nhớ cho các đối tượng hoàn toàn mới.

Vì vậy, để cắt một danh sách hoặc mảng thành các khối, hãy sử dụng phương thức

function toPartitions ( size ) {
    var partition = [];
    return function ( acc, v ) {
        partition.push( v );
        if ( partition.length === size ) {
            acc.push( partition );
            partition = [];
        }
        return acc;
    };
}
7:

function sliceIntoChunks(arr, chunkSize) {
    const res = [];
    for (let i = 0; i < arr.length; i += chunkSize) {
        const chunk = arr.slice(i, i + chunkSize);
        res.push(chunk);
    }
    return res;
}

const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
console.log(sliceIntoChunks(arr, 3));

Chạy mã trên mang lại đầu ra sau:

[[ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ], [ 10 ]]

Trong mã trên, chúng tôi chia

function partition ( arr, size ) {
    return arr.reduce( toPartitions( size ), [] );
}
1 thành các khối nhỏ hơn có kích thước
function partition ( arr, size ) {
    return arr.reduce( toPartitions( size ), [] );
}
2, bằng cách lặp qua mảng và cắt nó mỗi
function partition ( arr, size ) {
    return arr.reduce( toPartitions( size ), [] );
}
3. Trong lần lặp cuối cùng, sẽ chỉ còn một yếu tố (
function partition ( arr, size ) {
    return arr.reduce( toPartitions( size ), [] );
}
4), sẽ phải tạo nên đoạn riêng của nó.

Chia mảng thành các khối thậm chí bằng phương thức splice ()

Mặc dù phương pháp

function toPartitions ( size ) {
    var partition = [];
    return function ( acc, v ) {
        partition.push( v );
        if ( partition.length === size ) {
            acc.push( partition );
            partition = [];
        }
        return acc;
    };
}
9 có vẻ giống với phương pháp
function toPartitions ( size ) {
    var partition = [];
    return function ( acc, v ) {
        partition.push( v );
        if ( partition.length === size ) {
            acc.push( partition );
            partition = [];
        }
        return acc;
    };
}
7, việc sử dụng và tác dụng phụ của nó rất khác nhau. Hãy xem xét kỹ hơn:

function toPartitions ( size ) {
    var partition = [];
    return function ( acc, v ) {
        partition.push( v );
        if ( partition.length === size ) {
            acc.push( partition );
            partition = [];
        }
        return acc;
    };
}
0

Hãy xem điều này trong hành động thông qua một ví dụ về mã:

Kiểm tra hướng dẫn thực hành của chúng tôi, thực tế để học Git, với các thực hành tốt nhất, các tiêu chuẩn được công nghiệp chấp nhận và bao gồm bảng gian lận. Ngừng các lệnh git googling và thực sự tìm hiểu nó!

function toPartitions ( size ) {
    var partition = [];
    return function ( acc, v ) {
        partition.push( v );
        if ( partition.length === size ) {
            acc.push( partition );
            partition = [];
        }
        return acc;
    };
}
1

Chạy mã này mang lại:

function toPartitions ( size ) {
    var partition = [];
    return function ( acc, v ) {
        partition.push( v );
        if ( partition.length === size ) {
            acc.push( partition );
            partition = [];
        }
        return acc;
    };
}
2

Ở đây chúng tôi đang sử dụng vòng lặp

arrayALLPartionned = arrayAll.reduce( toPartitions( 3 ), [] ) );
0 để đi qua mảng. Trong mỗi lần lặp, chúng tôi thực hiện thao tác nối và đẩy mỗi khối vào một mảng kết quả cho đến khi không còn phần tử nào trong mảng gốc (
function partition ( arr, size ) {
    return arr.reduce( toPartitions( size ), [] );
}
8).

Một điều rất quan trọng cần lưu ý là

function toPartitions ( size ) {
    var partition = [];
    return function ( acc, v ) {
        partition.push( v );
        if ( partition.length === size ) {
            acc.push( partition );
            partition = [];
        }
        return acc;
    };
}
9 thay đổi mảng ban đầu. Khi
function toPartitions ( size ) {
    var partition = [];
    return function ( acc, v ) {
        partition.push( v );
        if ( partition.length === size ) {
            acc.push( partition );
            partition = [];
        }
        return acc;
    };
}
7 tạo ra một bản sao của mảng gốc, do đó sẽ không có bất kỳ thay đổi nào trong bản gốc.

Sự kết luận

Trong bài viết này, chúng tôi đã xem qua một vài cách dễ dàng để chia một danh sách thành các phần thậm chí trong JavaScript. Trong khi làm như vậy, chúng tôi đã học cách làm việc với một vài phương pháp mảng tích hợp như

function toPartitions ( size ) {
    var partition = [];
    return function ( acc, v ) {
        partition.push( v );
        if ( partition.length === size ) {
            acc.push( partition );
            partition = [];
        }
        return acc;
    };
}
7 và
function toPartitions ( size ) {
    var partition = [];
    return function ( acc, v ) {
        partition.push( v );
        if ( partition.length === size ) {
            acc.push( partition );
            partition = [];
        }
        return acc;
    };
}
9.

Làm thế nào để bạn chia một mảng trong JavaScript?

Cách dễ nhất để trích xuất một đoạn của một mảng, hay đúng hơn là cắt nó lên, là phương thức Slice (): Slice (start, end) - trả về một phần của mảng được gọi, giữa các chỉ số bắt đầu và kết thúc.slice() method: slice(start, end) - Returns a part of the invoked array, between the start and end indices.

Làm cách nào để phân vùng một mảng?

Viết trải nghiệm phỏng vấn ..
Ba chiều phân vùng của một mảng xung quanh một phạm vi nhất định ..
Sắp xếp lại một mảng ở dạng tối thiểu tối đa |Hiệp 1..
Sắp xếp lại một mảng sao cho 'mảng [j]' trở thành 'i' if 'arr [i]' là 'j' |Hiệp 1..
Sắp xếp lại một mảng ở dạng tối thiểu tối đa |Đặt 2 (O (1) không gian thêm).

Phân vùng một mảng có nghĩa là gì?

Định nghĩa: (1) Một phân chia của một tập hợp thành các bộ phân tách không trống hoàn toàn bao gồm tập hợp..A division of a set into nonempty disjoint sets that completely cover the set. (2) To rearrange the elements of an array into two (or more) groups, typically, such that elements in the first group are less than a value and elements in the second group are greater.

Thao tác mảng trong JavaScript là gì?

Thao tác mảng cho phép bạn thực hiện các tác vụ như thêm, xóa hoặc biến đổi các phần tử trong mảng của bạn.allows you to do tasks such as add, remove, or transform elements in your array.