将数组项的每个新anagram拆分为一个新行

时间:2017-04-12 18:54:32

标签: javascript arrays for-loop if-statement

我正在使用anagram生成器,并试图将阵列中的每个新项目分解为一个新行。它的工作方式是切片每个数组项并循环遍历每个字符。

输出必须是:

cat, cta, act, atc, tca, tac,

bat, bta, abt, atb, tba, tab,

rat, rta, art, atr, tra, tar,

但它是:

cat, cta, act, atc, tca, tac, bat, bta, abt, atb, tba, tab, rat, rta, art, atr, tra, tar, splat, splta, spalt, spatl,...

到目前为止,我的代码是:

HTML:

<div id="anagrams"></div>

JS:

var arr = ['cat', 'bat', 'rat', 'splat'];

var allAnagrams = function(arr) {
var anagrams = {};
arr.forEach(function(str) {
    var recurse = function(ana, str) {
        if (str === '') 
            anagrams[ana] = 1;
        for (var i = 0; i < str.length; i++)
            recurse(ana + str[i], str.slice(0, i) + str.slice(i + 1));
        };
        recurse(' ', str); 
});
return Object.keys(anagrams);
}

document.getElementById("anagrams").innerHTML = (allAnagrams(arr));

要为每个数组项创建一个新行,我基本上想要检查字符数是否超过字符串/数组项中的字符数,如果是,则在HTML中插入一个break。我试过这样做:

var arr = ['cat', 'bat', 'rat', 'splat'];

var allAnagrams = function(arr) {
var anagrams = {};
arr.forEach(function(str) {
    var recurse = function(ana, str) {
        if (str === '') 
            anagrams[ana] = 1;
        for (var i = 0; i < str.length; i++)
            recurse(ana + str[i], str.slice(0, i) + str.slice(i + 1));
            // check if string length is greater than the count and 
            // if it is, insert a break between the string
            if (i > str.length) {
                recurse(' <br>', str);
            }
        };
        recurse(' ', str); 
});
return Object.keys(anagrams);
}

document.getElementById("anagrams").innerHTML = (allAnagrams(arr));

然而,它仍然会打印在一行中。我接近这个正确的方法吗?我也尝试使用ana代替i,但我认为我需要使用i,因为实际的数量是正确的 - 这是正确的吗?

这里可以看到一个jsfiddle:https://jsfiddle.net/4eqhd1m4/1/

2 个答案:

答案 0 :(得分:2)

我会略微重组anagram创作。

  1. Anagrams现在是一个字符串。
  2. Recurse不再需要添加断行。考虑到您希望每个元素中断,在Array.forEach
  3. 中添加它会更清晰

    jsfiddle

    修改

    添加第二个jsfiddle来演示相同的行为,除了不直接使用字符串,它返回一个数组(使用breaklines进行拆分和重新连接)。最好将字谜作为数组返回。

    jsfiddle

答案 1 :(得分:0)

这是你需要的吗?不同行中的所有字谜

&#13;
&#13;
var arr = ['cat', 'bat', 'rat', 'splat'];

var allAnagrams = function(arr) {
var anagrams = {};
arr.forEach(function(str) {
    var recurse = function(ana, str) {
        if (str === '') 
            anagrams[ana] = 1;
        for (var i = 0; i < str.length; i++)
            recurse(ana + str[i], str.slice(0, i) + str.slice(i + 1));
            // check if string length is greater than the count and 
            // if it is, insert a break between the string
            if (i > str.length) {
                recurse(' <br \/>', str);
            }
        };
        recurse('  <br \/>', str); 
});
return Object.keys(anagrams);
}

document.getElementById("anagrams").innerHTML = (allAnagrams(arr));
&#13;
<div id="anagrams"></div>
&#13;
&#13;
&#13;