从string创建JS多维数组

时间:2016-01-24 01:28:39

标签: javascript arrays multidimensional-array

我想创建一个miltidimentional数组,如下所示

var multi-arr = [
                  ["A,2,5"], 
                  ["B,4,4"], 
                  ["C,4,4"]
                ]

来自使用ajax从数据库获取的字符串值。

从#

分隔的db获取的字符串数据
var string = "A,2,5# B,4,4# C,4,4";

我将字符串拆分为'#'分隔符

arr1=string.split(/\s*\#\s*/g);

创建下面的数组

var arr = ["A,2,5", "B,4,4", "C,4,4"];

我想进一步拆分上面数组中的项目 使用逗号','作为分隔符并创建一个多维数组

我的问题是循环只推送数组中的最后一项

for (i = 0; i < arr.length; i++) {  
        var arr2 = [];
        arr2[i]=arr2.push(arr1[i].split(/\s*\,\s*/g));
    }

console.log(arr2);

我做错了什么? 或者我能做得更好?

6 个答案:

答案 0 :(得分:3)

您可以将其拆分,但无论如何都要使用所有分隔符,只需将您的字符串重写为符合JSON标准并通过JSON.parse()运行:

// base string
var str = "A,2,5# B,4,4# C,4,4";

// quote text data. If the array was plain number data, we don't even need this step.
var quoted = str.replace(/([a-zA-Z]+)/g,'"$1"');

// rewrite to JSON form for a nested array
var jsonStr = "[[" + quoted.replace(/#/g,'],[') + "]]";

// done, just tell the JSON parser to do what it needs to do.
var arr = JSON.parse(jsonStr);

就是这样,arr现在是嵌套数组[["A",2,5],["B",4,4],["C",4,4]]

答案 1 :(得分:1)

这应该有效

var str = "A,2,5# B,4,4# C,4,4";
var arr = str.split(/\s*\#\s*/g);
    for (var i = 0; i < arr.length; i++) {  
        arr[i]=arr[i].split(/\s*\,\s*/g);
    }
console.log(arr)

在您的解决方案中var arr2 = [];需要在for循环之外,或者每次都重新定义。但是,我们并不需要定义单独的var,只需更新原始数组。

答案 2 :(得分:1)

var语句应该在外面 for循环,你不需要进行分配和推送。

var i;
var string = "A,2,5# B,4,4# C,4,4";
var arr1 = string.split("#");
var arr2 = [];
for (i = 0; i < arr1.length; i++) {
        arr2[i]=arr1[i].split(",");
}   

console.log(arr2);

正如Mike&#39; Pomax&#39; - 您可以将数据作为JSON从服务器返回。如果你正在使用PHP,可以这样做:

header('Content-Type: application/json');
echo json_encode($queryResult);
exit;

答案 3 :(得分:1)

这是一个适用于现代浏览器的简单解决方案:

var string = "A,2,5# B,4,4# C,4,4";
var multiArray = string.split(/\s*\#\s*/g).map(function(substr) {
  return [substr];
});

答案 4 :(得分:0)

从您当前的arr变量 - ["A,2,5", "B,4,4", "C,4,4"] - 您可以像这样创建multi_arr变量:

var multi_arr = [];

arr.forEach(function(a) {
  multi_arr.push([a]);
});

请记住,这将创建数组,正如您所寻找的那样,这就是:

var multi-arr = [
                  ["A,2,5"], 
                  ["B,4,4"], 
                  ["C,4,4"]
                ]

如果您希望拆分内部数组中的每个项目,这将适合您:

var multi_arr = [];

arr.forEach(function(a) {
  multi_arr.push(a.split(','));
});

答案 5 :(得分:0)

您需要在第一次拆分后再次遍历数组中的每个元素。我会使用Array.prototype.map因为它会返回一个新数组而不会改变原始数组。

我还检查了内部数组中的值是否为数字。如果它被解析为实际数字。

&#13;
&#13;
var arr = ["A,2,5", "B,4,4", "C,4,4"];

console.log(arr);

var multidimensional = arr.map(function(item) {
  // you need to split the elements in your array
  return item.split(/,/).map(function(val) {
    // you may as well check if it's a string or a Number
    return parseIfNumber(val);
  })
});

console.log(multidimensional);

// helper functioon
function parseIfNumber(val) {
  return /^[0-9.-]+$/.test(val) 
    ? Number(val) 
    : val;
}
&#13;
<script src="http://codepen.io/synthet1c/pen/WrQapG.js"></script>
&#13;
&#13;
&#13;