2015-07-11 19 views
8

Tôi đang cố gắng tạo hàm _.combinations (dấu gạch dưới pha trộn) có ba tham số arr, pockets, duplicates. Đây là một bài kiểm tra mà tôi đã thiết kế để chỉ ra hành vi nên như thế nào.Chức năng trả về mảng kết hợp mảng

expect(_.combinations([1, 2], 1, false)).to.be.equal([[1],[2]]) 
expect(_.combinations([1, 2], 1, true)).to.be.equal([[1],[2]]) 
expect(_.combinations([1, 2, 3], 2, false)).to.be.equal([[1,2],[1,3],[2,3]]) 
expect(_.combinations([1, 2, 3], 2, true)).to.be.equal([[1,2],[1,3],[2,3],[2,1],[3,1],[3,2]]) 
expect(_.combinations([1, 2, 3, 4], 3, false)).to.be.equal([[1,2,3],[1,2,4],[1,3,4],[2,1,4],[2,3,4],[3,4,1]]) 
expect(_.combinations([1, 2, 3, 4], 3, true)).to.be.equal([[1,2,3],[1,2,4],[1,3,4],[2,1,4],[2,3,1],[2,3,4],[3,1,2],[3,4,1],[3,4,2],[4,1,2],[4,1,3],[4,2,3]]) 

Tôi đã tự hỏi trước khi tôi đi và tạo chức năng này nếu nó tồn tại trong thư viện. Có lẽ chức năng cụ thể này đã có một cái tên mà tôi không quen thuộc.

Có điều gì đó ngoài kia thực hiện việc này không?

+2

Là điểm khởi đầu, bạn có thể sử dụng chức năng [power set] (https://en.wikipedia.org/wiki/Power_set) (chỉ cần tìm kiếm nó; nhiều người đã viết hàm cho nó) để lấy các kết hợp. Từ đó nó nên được tương đối đơn giản để lọc dựa trên các đối số khác của bạn –

Trả lời

6

This thư viện có chức năng tốt. Tôi nghĩ rằng nó khá nhiều có những gì bạn cần.

var combinatorics=require('/path/to/combinatorics'); 

var a = [1,2,3]; 

var ans1=combinatorics.permutation(a,2); 
console.log(ans1.toArray());// [[1,2],[2,1],[1,3],[3,1],[2,3],[3,2]] like when duplicates is set to true 


var ans2=combinatorics.combination(a,2); 
console.log(ans2.toArray());//[[1,2],[2,1],[1,3],[3,1],[2,3],[3,2]] like when duplicates is set to false 
+0

Điều này trông tuyệt vời Tôi khá chắc chắn điều này có tất cả mọi thứ mà tôi muốn :) – ThomasReggi

+0

có ... các repo github có hướng dẫn khá rõ ràng và ví dụ cũng ... – Pravin

Các vấn đề liên quan