如何在JavaScript中将JSON字符串数组转换为键值对对象?
解决PHP传递数据到JS生成键值对对象的问题
方法一:在PHP端直接生成目标格式(推荐)
直接在PHP中构建关联数组,再通过json_encode输出成JS可直接识别的对象格式,避免前端额外处理:
修改后的PHP代码:
<?php // 连接数据库 include("con.php"); // 查询语句 $query = "SELECT * FROM magacin_artikli"; $r = mysqli_query($conn, $query); $dataGrafDodArt = array(); while($row = mysqli_fetch_array($r)){ $key = $row["art_naz"]; $value = (float)$row["art_nabcena"]; // 转换为数值类型,适配图表需求 // 处理重复键:根据需求选择累加或覆盖 if(isset($dataGrafDodArt[$key])){ $dataGrafDodArt[$key] += $value; // 累加重复键对应的值 // 若需覆盖则改为:$dataGrafDodArt[$key] = $value; } else { $dataGrafDodArt[$key] = $value; } } // 关闭连接 $conn->close(); ?>
在JS中直接调用生成的对象:
var oData = <?php echo json_encode($dataGrafDodArt); ?>;
这样生成的oData就是你需要的键值对对象格式。
方法二:在JavaScript端转换现有数组
如果无法修改PHP代码,可在JS中遍历现有字符串数组,拆分键值并构建对象:
var oDataArray = ["asd:2","asd:3","asd:2","ddd:3"]; var oData = {}; oDataArray.forEach(item => { const [key, valueStr] = item.split(':'); const value = parseFloat(valueStr); // 同样处理重复键:示例为累加,需覆盖则直接赋值 if(oData[key]){ oData[key] += value; } else { oData[key] = value; } });
注意:对象的键具有唯一性,若数据源存在重复键(如示例中的asd),必须明确是覆盖还是累加对应的值,上述两种方法均提供了两种处理逻辑供选择。
内容的提问来源于stack exchange,提问作者Kuletiska
相关产品推荐
相关产品推荐

