Я пытаюсь создать массив строк и вывести возможности по длине строки массива. Например:

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

 //I want to produce this outcome

 a
 ab
 abc
 abcd
 b
 bc
 bcd
 c
 cd
 d

Я знаю, что таким образом могу получить # возможностей только для "a" :

 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) th с жестким кодированием. Был бы какой-либо метод (ы), чтобы создать это и сохранить все возможности до (n) -ой длины?

0
Zulu 28 Авг 2017 в 05:02

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));
}
3
Solomon Tam 28 Авг 2017 в 02:12

Я также буду использовать вложенный цикл 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);
  }
}
1
David Jaw Hpan 28 Авг 2017 в 02:15

Это решение использует вложенный цикл 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/

1
Xela 28 Авг 2017 в 02:21