笛卡爾乘積是指在數學中,兩個集合X和Y的笛卡尓積,又稱直積,表示爲X × Y,第一個對象是X的成員而第二個對象是Y的全部可能有序對的其中一個成員 。javascript
假設集合A={a, b},集合B={0, 1, 2},則兩個集合的笛卡爾積爲{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。前端
通常的實現中,c語言,python,java實現的方式比較多,可是對於前端而言,也是有其實現意義的,vue
等等,只有你想不到的,沒有它實現不了的。接下來就來看看他的具體實現吧!java
/* * @Author: Mr Jiang.Xu * @Date: 2019-08-31 00:05:33 * @Last Modified by: Mr Jiang.Xu * @Last Modified time: 2019-08-31 00:05:33 */
function cartesian(arr) {
if (arr.length < 2) return arr[0] || [];
return [].reduce.call(arr, function (col, set) {
let res = [];
col.forEach(c => {
set.forEach(s => {
let t = [].concat(Array.isArray(c) ? c : [c]);
t.push(s);
res.push(t);
})
});
return res;
});
}
複製代碼
因爲實現方法不少,這裏就不一一舉例了,上述實現方式的時間複雜度爲O(n^3),還不是最優,因此有更好的實現方法歡迎留言實現哦~python
若是想學習更多js算法和數據結構,能夠長按關注哦~ 因爲最近工做變更,而且準備自研一套CMS開源系統,因此可能文章儘可能每週更新一次,歡迎你們共同窗習進步。react