数组元素两两组合 php,js多个数组元素两两组合三三组合
我的思路是这样的:
先看成一个组合的问题([x]选n)
再写一个过滤器把含有有同一组元素的组合过滤掉.
这样扩展性会比较好;
//合并数组
function concat(...arrs){
return [].concat(...arrs);
}
//过滤器 判断是不符合规则
function getFilter(...arrs){
return function(arr){
var haveArr = new Set();
for(let v of arr){
let perr = arrs.find((a)=>{
return a.includes(v)
})
if(haveArr.has(perr)){
return false
}else{
haveArr.add(perr)
}
}
return true;
}
}
//递归组合实现
function zuhe(arr,n){
var pass = new Set();
var zh = []
if(n<0 || arr.length < n){throw '参数错误'}
if(n == 1){
for(let v of arr){
if(!pass.has(v)){ //去重
pass.add(v);
zh.push([v]);
}
}
return zh;
}else if(arr.length == n){
return [arr];
}
for(let i=0; i <= arr.length-n; i++ ){
let v = arr[i];
if(!pass.has(v)){ //去重
pass.add(v);
let _zh = zuhe(arr.slice(i+1),n-1).map(a=>{
a.unshift(v)
return a;
})
zh = zh.concat(_zh)
}
}
return zh;
}
//----------以上是所需要的工具函数
var arr1 = ["a","b"];
var arr2 = ["A","B"];
var arr3 = ["1","2"];
var allArr = concat(arr1,arr2,arr3); //合并数组
var filter = getFilter(arr1,arr2,arr3); //生成过滤器
var zh1 = zuhe(allArr,2).filter(v=>filter(v)).map(v=>v.join("_")); // x选2>过滤>组装成需要格式
var zh2 = zuhe(allArr,3).filter(v=>filter(v)).map(v=>v.join("_")); // x选3>过滤后>组装成需要格式
console.log(zh1);
console.log(zh2);
/*
["a_A","a_B","a_1","a_2","b_A","b_B","b_1","b_2","A_1","A_2","B_1","B_2"]
["a_A_1","a_A_2","a_B_1","a_B_2","b_A_1","b_A_2","b_B_1","b_B_2"]
*/
---------------- 补充
想明白 其实还是一个组合的问题 只是组合的结果要处理一下 稍微改一下 zuhe 函数:
function zuhe(arr,n){
var pass = new Set();
var zh = []
if(n<0 || arr.length < n){throw '参数错误'}
if(n == 1){
for(let _arr of arr){
for(let v of _arr){
if(!pass.has(v)){ //去重
pass.add(v);
zh.push([v]);
}
}
}
return zh;
}
for(let i=0; i <= arr.length-n; i++ ){
for(let v of arr[i]){
if(!pass.has(v)){ //去重
pass.add(v);
let _zh = zuhe(arr.slice(i+1),n-1).map(a=>{
a.unshift(v)
return a;
})
zh = zh.concat(_zh)
}
}
}
return zh;
}
var arr1 = ["a","b","c"];
var arr2 = ["A","B"];
var arr3 = ["1","2"];
var zh2 = zuhe([arr1,arr2,arr3],2)
var zh3 = zuhe([arr1,arr2,arr3],3)
console.log(zh2)
console.log(zh3)
数组元素两两组合 php,js多个数组元素两两组合三三组合相关推荐
- c语言一维数组转化为二维矩阵,js将一维数组转化为二维数组
遇到的问题: 后端返回的是一组一维数组,但是需要展示的格式是二维数组,常见的场景举例:后台返回10个长度的数组,需要分成3个一组展示在banner上. 例:[1,2,3,4,5,6,7,8,9,10] ...
- js中定义数组的两种方式
js中定义数组: 注意事项: 1.在js中定义数组,不用担心数组角标越界的问题,可以自动扩容. 2.在js中,数组是可以定义任何数据类型的. 1.指定数组长度 运行结果: 2.简写方式:
- js的tree数组对象扁平化思否_JS专题之数组展开
前言 首先什么是数组展开? 假如现在有这样一个需求:将后台的一个多重 List 数据,展开成一个 List 后,并去重后排序: ["a", "b", [&quo ...
- JS DOM获取标签/元素style样式
JS DOM获取标签/元素style样式 文章目录 JS DOM获取标签/元素style样式 .style getComputedStyle() .style 只能获取行内样式,不能获取style标签 ...
- JS阻止冒泡和元素默认事件
JS阻止冒泡和元素默认事件 文章目录 JS阻止冒泡和元素默认事件 1.JS阻止冒泡 :stopPropagation() 2.阻止元素默认事件行为 preventDefault() onclick + ...
- js list删除指定元素_删除js数组中的指定元素,有这两步就够了
js数组是js部分非常重要的知识,有时我们有这么个需求js数组删除指定元素,先定义一个函数来获取删除指定元素索引值,然后用js数组删除的方法,来删除指定元素即可,就两步不难,很简单. 1.JS的数组对 ...
- java json 去重_js操作两个json数组合并、去重,以及删除某一项元素
两个json数组合并去重,以及删除某一项元素 let ha = [ {id:'H',name:'3'}, {id:'A',name:'6'}, {id:'B',name:'14'}, {id:'C', ...
- vue 删除两个集合中相同的数据_vue.js如何删除数组里面的数据
vue.js如何删除数组里面的数据 发布时间:2020-12-10 12:04:44 来源:亿速云 阅读:107 作者:小新 这篇文章主要介绍了vue.js如何删除数组里面的数据,具有一定借鉴价值,需 ...
- 遍历strs数组,并判断数组中每一个元素的长度, * 将长度为偶数的元素和长度为奇数的元素分别存放在两个集合中,
package Day08;import java.util.ArrayList;/*** 二* 字符串数组strs中包含字符串{"12","345",&quo ...
最新文章
- 人工智能对教育产业的冲击和机遇分析 ——游戏化学习
- 快速生成NHibernate的映射文件和映射类的利器 —— codesmith软件
- 双11奇迹背后的大数据平台,不喧哗,自有声!
- Exploring Ionic Lists
- 百度以侵犯商业秘密起诉前高管王劲 索赔5000万 内附王劲离职承诺函
- jenkins vue 打包特别慢_Jenkins 自动化部署
- 跨越鸿沟:计算机视觉-学术界与工业界的GAP有多大?
- [Spark版本更新]--Spark-2.4.0 发布说明
- 当我们在谈论瑞幸咖啡的时候,我们谈论什么?
- 被遗忘权的崩塌:当AI可以通过你的朋友了解你
- PostOffice
- 【原创】北京智能云分院招商项目之五:智能
- 为什么我不做金蝶二次开发了,个人的感受!
- 国内免费接收回复Google Voice短信的方法
- BZOJ:3441 乌鸦喝水
- Win11预览体验计划显示Your PC does not meet the minimum hardware requirements...的解决方案
- 发布微头条显示调用服务器失败,发布的微头条,有的标明“内容已编辑”,有的未标示,这是怎么回事?...
- 全国高校食堂排行榜TOP10?!
- Docker三大核心之容器
- Scratch少儿编程与游戏:一起拍蚊子吧
热门文章
- HTML+CSS+JavaScript速成
- QEMU imx6ul开发板环境搭建
- Java方法和数组练习
- 5G聚合路由器助力无人机监控盲区打好疫情阻击战
- JS异步:执行原理与回调
- php 信用卡通道api,php – PayPal REST API为信用卡令牌返回500 Server错误
- WebGIS前端框架(openlayers,mapbox,leaflet)图形图像底层渲染原理分析
- 向身边优秀的人学习,让自己变得优秀
- 什么样的程序员才算得上优秀,把导师曾对我说的话送给大家(比代码更重要的事)
- python导入库关键词_怎么样导入RobotFramework 自定义关键字(库文件)