2015-02-18 2 views
0

У меня есть массив типа String в Javascript. Например: ["ab", "cd", "ef", "gh"] Этот массив не фиксирован & по алфавиту.Рекурсивно объединить строки в массиве JavaScript

Я хочу, чтобы выход, как это:

ab 
abcd 
abef 
abgh 
abcdef 
abcdgh 
abefgh 
abcdefgh 

cd 
cdef 
cdgh 
cdefgh 

ef 
efgh 
+4

Пожалуйста, покажите нам свои усилия в первую очередь. У вас есть код, в котором вы пытались решить вашу проблему? –

ответ

2

Используйте это для создания power set от x:

function power(x) { 
    var r = [""], // start with empty set/string 
     l = 1; 
    for (var i=0; i<x.length; l=1<<++i) // OK, l is just r[i].length, but this looks nicer :) 
     for (var j=0; j<l; j++) { 
      r.push(r[j].slice(0)); // copy 
      r[j] += x[i]; 
     } 
    return r; 
} 

Использование:

> power(["ab", "cd", "ef", "gh"]) 
["abcdefgh", "cdefgh", "abefgh", "efgh", "abcdgh", "cdgh", "abgh", "gh", "abcdef", "cdef", "abef", "ef", "abcd", "cd", "ab", ""] 
+0

Большое спасибо Берги. Силовой комплект не пришел мне в голову: P –

0

Я согласен с малиновки, что вы должны попробовать себя в первую очередь, но здесь (с помощью из lodash библиотеки):

function combos(arr) { 
    if(arr.length <= 1) return arr 
    return _.flatten(arr.map(function(key, index) { 
    return [[key]].concat(
     combos(arr.slice(index+1)) 
     .map(function(combo) { return [key].concat(combo) }) 
    ) 
    })) 
} 

console.log(
    combos(["a", "b", "c", "d"]) 
    .map(function(arr) { return arr.join("")}) 
) 

http://jsbin.com/caxowuwuki/3/edit

+0

Спасибо Ollim..yes я буду публиковать со следующего кода, который я пытался достичь этого. Было хорошо узнать о библиотеке lodash. Новое обучение для меня :) –

Смежные вопросы