我想创建一个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);
我做错了什么? 或者我能做得更好?
答案 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
因为它会返回一个新数组而不会改变原始数组。
我还检查了内部数组中的值是否为数字。如果它被解析为实际数字。
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;