gpt4 book ai didi

javascript - 如何从字符串数组中收集所有可能的连续字符串连接?

转载 作者:行者123 更新时间:2023-12-02 05:20:42 26 4
gpt4 key购买 nike

我正在尝试找到一种有效的方法来从字符串数组的数组中收集所有可能的连续字符串连接,不包括具有重复部分的字符串。示例:

var arr = [
["pq","bcd"], ["l", "ffnn", "xyz"], ["hm", "ffnn","ij"], ["ab","def","u","eeff"]
];
function f(a) {
var t = [];
a[a.length-4].forEach(function(i) {
a[a.length-3].forEach(function(j) {
if (j !== i) (
a[a.length-2].forEach(function(k) {
if (k !== j && k !== i) (
a[a.length-1].forEach(function(l) {
if (l !== k && l !== j && l !== i)
(t.push(i+","+j+","+k+","+l));
})
)
})
)
})
});
return t;
};
console.log(f(arr));

结果会在哪里

["pq, l, hm, ab"],
["pq, l, hm, def"],
//...and so on...
["bcd, xyz, ij, u"],
["bcd, xyz, ij, eeff"]

(请注意,虽然例如 ["pq, ffnn, ffnn, ab"] 是一个可能的组合,但它不包含在结果中,因为它包含重复项)。
问题是我需要知道数组的长度并相应地编写多个嵌套函数。但我需要一些函数来自动检测该长度,并返回所需的结果。也许可以使用递归重写上述函数,但我不确定这是否是解决此类问题的最佳方法。

最佳答案

如果我没理解错的话,给定一个字符串数组 n,您需要一个包含所有可能数组 m 的列表,这样

  1. 对于所有im[i]n[i]之一
  2. 对于所有ij,如果i != jm[i] != m[j]

好吧,分成两半。

首先,考虑一个函数 combo,它给定一个字符串数组,生成一个满足 (1) 的数组。你怎么写的?

combo 对一个空输入数组产生一个仅包含一个空数组的数组。

非空输入数组上的

combo 可以通过获取“head”(数组的第一个元素)来工作,然后依次应用来自 head 的每个字符串并添加到每个数组中在“尾部”(输入的其余部分没有头部)上调用 combo 的返回值。

现在遍历该列表并删除具有重复项的条目。

编辑:考虑到其他一些建议的托尔斯泰式长度,我想我应该发布我的答案,它使用 Underscore图书馆:

const flatMap = (l, f) => _.flatten(_.map(l, f), true)

const combo = a => a.length?
(v => flatMap(_.head(a), e => v.map(g => [e].concat(g))))
(combo(_.tail(a))):
[[]];

const allUniqueCombos = a => combo(a).filter(n => _.uniq(n).length == n.length)

var arr = [["pq","bcd"], ["l", "ffnn", "xyz"],
["hm", "ffnn","ij"], ["ab","def","u","eeff"]];

console.log(JSON.stringify(allUniqueCombos(arr)))
<script src="http://underscorejs.org/underscore.js"></script>

(这远非 CPU 的最有效使用——但计算机比计算机程序员便宜得多。)

关于javascript - 如何从字符串数组中收集所有可能的连续字符串连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38760816/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com