我有一个由:
分隔的数字字符串,例如"20:1:21,21:0:21"
,此php代码使用,
爆炸了字符串,并将结果数组连接为一个关联数组,例如:
$in = "20:1:21,21:0:21";
$list=explode(",",$in);
$results = array( 0 => array(), 1 => array());
foreach ($list as $item) {
$item=explode(":",$item);
if (sizeof($item)==3) {
$results[$item[1]][$item[0]] += $item[2];
}
}
在这里注意+=
运算符。
的期望值
array(2) {
[0]=>
array(1) {
[21]=>
int(21)
}
[1]=>
array(1) {
[20]=>
int(21)
}
}
或[{"21":21},{"20":21}]
作为json输出。
在javascript中,就像
var results = { 0: [], 1: [] };
for (var key in list) {
var item = list[key];
item=item.split(":");
if (item.length == 3) {
if(!results[item[1]]) results[item[1]]={};
results[item[1]][item[0]]=item[2];
}
}
但是它会在附加正确的值之前创建null
值的列表,为什么?
答案 0 :(得分:3)
您的JS代码似乎期望输入array
,但是您的输入是字符串。另外,您将result
定义为普通对象,但实际上需要一个数组...
这是您可以在JavaScript中完成的方法。
var input = "20:1:21,21:0:21";
var result = input.split(",")
.map(s => s.split(":"))
.reduce((acc, [a,b,c]) => (acc[b] = {[a]: c}, acc), []);
console.log(result);
答案 1 :(得分:1)
或者您可以使用正则表达式来完成它:
var string = '20:1:21,21:0:21';
var regex = /(\d+):(\d+):(\d+)/g;
var match;
var result = {};
while (match = regex.exec(string)) {
result[match[2]] = {[match[1]]: match[3]};
}
console.log(result);