如何将以下字符串拆分为二维数组:

时间:2015-03-27 04:22:42

标签: javascript arrays split

如何将下面的字符串拆分为2维数组:

Customer::Europe|UK|Scotland|Product::Drinks|Water| 

数组:

[Customer][Europe] 
[Customer][UK] 
[Customer][Scotland] 
[Product][Drinks] 
[Product][Water]

不确定如何创建数组。没有编码多年,所以要善良

        hArray= [];
        vArray= [];
        var i = j = 0;
        var count = hierarchy.search(/[:|]+/);
            write(hierarchy);
        while (count > 0) {

                  if (hierarchy.indexOf(":") < hierarchy.indexOf("|")  || (hierarchy.indexOf(":") > 0 && hierarchy.indexOf("|") == -1) ) {
                      hArray[j] = hierarchy.substr(0,hierarchy.indexOf(":"));
                      hierarchy = hierarchy.slice(hierarchy.indexOf(":")+2); 
                      count = hierarchy.search(/[:|]+/);
                      j++;
                      } else 
                        if (hierarchy.indexOf("|") < hierarchy.indexOf(":")  {
                            vArray[i] = hierarchy.substr(0,count); 
                             hierarchy = hierarchy.slice(count+1); 
                             count = hierarchy.search(/[:|]+/);
                             i++;
                      }           
                    if (count == -1) break;

//创建multiArray?
            }

2 个答案:

答案 0 :(得分:0)

var source = "Customer::Europe|UK|Scotland|Product::Drinks|Water|";
var parts = source.split(/(\w+::)/);
var result = [];

for (var i = 1; i < parts.length; i += 2) {
  var key = parts[i].replace("::", "");
  var values = parts[i + 1].split("|");
  for (var j = 0; j < values.length - 1; ++j) {
    var line = new Array(2);
    line[0] = key;
    line[1] = values[j];
    result.push(line);
  }
}

console.log(result);

答案 1 :(得分:0)

您可以像这样使用Array.reduce。首先,我们将|拆分为任何owrd,然后是::。然后我们通过使用数组作为备忘录来减少它,并将数组推入备忘录,我们最终返回。

var arr = input.split(/\|(?=\w+::)/).reduce(function(arr, str){
    var array = str.split('::');
    return arr.push(str.split('::')[1].split('|').filter(String).map(function(s){  
       return [array[0], s]         
    })), arr;
}, []);