我想找到一種有效的方法來收集所有可能的連續字符串連接從一個字符串數組的數組,不包括具有重複部分的字符串。例如:如何從字符串數組數組中收集所有可能的連續字符串連接?
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"]
是一個可能的組合,但並不包括在結果,因爲它包含一個副本)。
問題是我需要知道數組的長度並相應地編寫多個嵌套函數。但是我需要一些能自動檢測這個長度的函數,並返回所需的結果。也許可以用遞歸來重寫上面的函數,但我不確定這是否是解決這個問題的最佳方法。
備註:當你不使用它的時候使用'map'價值是沒有意義的,還有一點額外的工作(它爲你創建了一個數組,然後你就扔掉了)。如果不使用返回值,請使用'forEach'。 –
只會有兩個維度?例如,包含數組的數組?不是包含數組數組的數組? –
@TJCrowder:是的,我會盡量保持它「包含字符串數組的數組」。 –