为了账号安全,请及时绑定邮箱和手机立即绑定

javascript 进行组合,C(M,1),m数量是不确定的,应该如何解决?

javascript 进行组合,C(M,1),m数量是不确定的,应该如何解决?

有只小跳蛙 2018-07-22 07:32:46
我看到其他人提到一个问题,还有下边的答案,感觉非常有兴趣,就把题目改编了题目来源及自己的思路题目原本是这样的,`var wordList = [[{'热烈'}, {'万分'}, {'非常'}, ''], [{'欢迎'}, {'感谢'}, {'谢谢'}], [{'您'}, {'亲'}, {'老板'}, {'大神'}, ''], [{'光临'}, {'惠顾'}, {'支持'}], [{'小店'}, {'本店'}, {'火女菜馆'}]];`如何把这个全都组合起来呢,相同行的不能组成一个,比如:热烈 感谢 老板 支持 小店(每行取一个)这是正确的。但是热烈 万分 谢谢 大神 支持,这样是错误的每次要提取的数量m,是不一定的,比如m=5,就是热烈 感谢 老板 支持 小店m=4,就是 热烈 感谢 老板 支持热烈 感谢 老板 小店 热烈 老板 支持 小店 感谢 老板 支持 小店 这样的,当然还有很多种,都没有一一列出来,这种计算应该如何达成呢? 组成的应该是这样的:[{'热烈'},{'感谢'},{'老板'},{'支持'},{'小店'}]
查看完整描述

2 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞


let wordList = [
    ['热烈', '万分', '非常'],
    ['欢迎', '感谢', '谢谢'],
    ['您', '亲', '老板', '大神'],
    ['光临', '惠顾', '支持'],
    ['小店', '本店', '火女菜馆']
];

let M = 4;

/** @example cross([[1]], [2,3]) // [[1,2], [1,3]] */
let cross = (a1, a2) => a1.reduce((r, s1) => r.concat(a2.map(s2 => [...s1, s2])), []);
//还可以这么写
//let cross = (a1, a2) => [].concat(...a1.map(s1 => a2.map(s2 => [...s1, s2])));

let result = wordList.slice(0, M).reduce(cross, [[]]);



查看完整回答
反对 回复 2018-07-22
?
莫回无

TA贡献1865条经验 获得超7个赞


改成这样该如何做:

let wordList=[
{"name":"热烈","id":1},{"name":"万分","id":2},{"name":"非常","id":3},
{"name":"欢迎","id":1},{"name":"感谢","id":2},{"name":"谢谢","id":3},
{"name":"您","id":2},{"name":"亲","id":1},{"name":"大神","id"1}
]

id相同的不能组合为一组,共有多少种组合的方式,同样M是不确定的,从这些组种选择M个想组合,该如何代码


查看完整回答
反对 回复 2018-07-22
  • 2 回答
  • 0 关注
  • 319 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信