2017-08-28 71 views
0

我想創建一個字符串數組,並通過數組字符串的長度產生可能性。例如:沒有硬編碼創建一個數組

var someStr = ["a","b","c","d"]; 

//I want to produce this outcome 

a 
ab 
abc 
abcd 
b 
bc 
bcd 
c 
cd 
d 

我知道我能得到的可能性#爲「一」只通過這種方式:

var numCombinations = 0; 
var comboString = ''; 
var outcome = []; 

for(var i = 0; i < someStr.length; i++){ 

    comboString += someStr[i]; 

    outcome[i] = comboString; 

    numCombinations += i; //# of combinations from above 

} 

但我怎麼會繼續與這些變量對遺留下來的可能性?我曾想過一次又一次創建嵌套for循環,但最終會導致硬編碼的長度。會不會有任何方法來創建這個並將所有可能性存儲到第(n)個長度?

+0

@Amadan噢,對不起,我會編輯,燁我的意思是[ 「A」, 「B」, 「C」, 「d」] – Zulu

+0

的可能的複製[如何找到在JavaScript中的所有集合的子集?](https://stackoverflow.com/questions/42773836/how-to-find-all-subsets-of-a-set-in-javascript) –

回答

3

希望得到這個幫助。

function getComboStringListFromIdx(arr, idx){ 
    var result = []; 
    var comboString = ''; 
    for(var i=idx; i<arr.length; i++){ 
     comboString += arr[i]; 
     result.push(comboString); 
    } 
    return result; 
} 

var someStr = ['a','b','c','d']; 

var outCome = []; 
for(var i = 0; i<someStr.length; i++){ 
    outCome = outCome.concat(getComboStringListFromIdx(someStr, i)); 
} 
+0

你是一個天才,我愛你 – Zulu

1

我也將使用嵌套for循環!一個是normal looping和其他跳過less than當前指數從第一循環!

var someStr = ["a","b","c","d"]; 

for(var i = 0;i < someStr.length;i++) { 
    output(i); 
} 
function output(index) { 
var str = ""; 
    for(var j in someStr) { 
    if(j < index) { 
     continue; 
    } 
    str += someStr[j]; 
    console.log(str); 
    } 
} 
+0

哇這個作品呢!謝謝' – Zulu

1

該解決方案使用嵌套for循環並跳過嵌套for循環的第一個元素的連接。

var arr = ["a","b","c","d"]; 
for(var i=0;i<arr.length;i++){ 
    var str = arr[i]; 
    for(var j=i;j<arr.length;j++){ 
    if(i!==j) 
     str+=arr[j]; 
    console.log(str); 
    } 
} 

https://jsfiddle.net/fmy539tj/

+0

哇我從來沒有想過這樣,輝煌!泰! – Zulu

相關問題