【问题标题】:Creating various arrays from a string using LOOPS使用 LOOPS 从字符串创建各种数组
【发布时间】:2018-08-20 12:48:53
【问题描述】:

我有一串值

"000111111122222223333333444455556666"

我如何使用循环为从 0 到 3 的索引值生成一个数组(创建一个 [000] 数组,然后创建另一个从 3 到 10、10 到 17、17 到 24 的索引值数组,例如. [1111111, 2222222, 333333] 然后另一个循环生成从 24 到 28、28 到 32、32 到 36 的索引值数组,例如生成 [4444, 5555, 6666])?

因此,总共使用三个不同的 for 循环创建了 3 个不同的数组。

array1 = [000]
array2 = [1111111, 2222222, 333333]
array3 = [4444, 5555, 6666]

【问题讨论】:

  • 如果我理解正确,您想通过字符串中的数量来分隔值? 0112、01100 和 0110 的预期输出是什么
  • 请提供您想要的输出,从您所写的内容中很难说出您想要的最终结果是什么
  • 你的最后一个问题是什么? stackoverflow.com/questions/51910212/…
  • @NinaScholz 即使它真的很接近它也不完全相同,这次他想输出不同的数组,可能每个部分都没有定义大小
  • 顺便说一句,没有尝试。

标签: javascript arrays for-loop


【解决方案1】:

您可能希望尝试以下方法(仅是示意性解决方案!):

var l_Input = "000111111122222223333333444455556666" ;

var l_Array_1 = [] ;
var l_Array_2 = [] ;
var l_Array_3 = [] ;


var l_One_Char ;

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

    l_One_Char = l_Input.substring(i,i) ;

    if (i < 3) {
        l_Array_1.push(l_One_Char) ;
        continue ;
    }

    if (i >= 3 && i < 10) {
        l_Array_2.push(l_One_Char) ;
        continue ;
    }
    :
    :

}

【讨论】:

    【解决方案2】:

    我认为这会起作用。

    const str = '000111111122222223333333444455556666';
    
    function makeArr(str, item) {
        let firstIndex = str.indexOf(item);
        let lastIndex = str.lastIndexOf(item) + 1;
        return [ str.substring(firstIndex, lastIndex) ];
    }
    
    const first = makeArr(str, 0);
    const second = [].concat(makeArr(str, 1))
                     .concat(makeArr(str, 2))
                     .concat(makeArr(str, 3));
    const third = [].concat(makeArr(str, 4))
                    .concat(makeArr(str, 3))
                    .concat(makeArr(str, 3));
    

    【讨论】:

      【解决方案3】:

      您可以映射子字符串。

      var str = '000111111122222223333333444455556666',
          parts = [[3], [7, 7, 7], [4, 4, 4]],
          result = parts.map((i => a => a.map(l => str.slice(i, i += l)))(0));
      
      console.log(result);

      【讨论】:

        【解决方案4】:
        function split(string, start, end) {
            var result = [],
                substring = string[start],
                split;
        
            for (var i = start + 1; i < end; i++) {
                var char = string[i];
                if (char === substring[0])
                    substring += char;
                else {
                    result.push(substring);
                    substring = char;
                }
            }
            result.push(substring);
            return result;
        }
        

        split("00011122",0,8)

        [“000”、“111”、“22”]

        【讨论】:

          【解决方案5】:

          要动态地执行此操作,您可以使用.split() 和.map() 方法从您的string 中创建一个array,然后按值分组此array 项目。

          这应该是我们的代码:

          const str = "000111111122222223333333444455556666";
          
          var groupArrayByValues = function(arr) {
            return arr.reduce(function(a, x) {
              (a[x] = a[x] || []).push(x);
              return a;
            }, []);
          };
          
          var arr = str.split("").map(v => +v);
          var result = groupArrayByValues(arr);
          

          这将为您提供一个 array 的单独数组,每个数组具有相似的 values。

          演示:

          const str = "000111111122222223333333444455556666";
          
          var groupArrayByValues = function(arr) {
            return arr.reduce(function(a, x) {
              (a[x] = a[x] || []).push(x);
              return a;
            }, []);
          };
          
          var arr = str.split("").map(v => +v);
          var result = groupArrayByValues(arr);
          
          
          console.log(result);

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-03-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多