我在PHP中有一个数组,我想用Javascript编辑。
我将它从php传递到这样的javascript:
var allPartsList = JSON.parse('<?php echo json_encode($all); ?>');
如果我console.log(all);
我看到了这个:
我最终要做的是查找从PHP传递的行,其中partNumber
或supplier
这两个字段之一为空,然后将值添加回基于数组on用户提交的值。以下值由用户点击的复选框提供。
我有一个循环语句的语法:
$('input[type="checkbox"][id="supplierCheck"]').change(function() {
if(this.checked) {
var supplier = this.dataset.supplier;
var partNumber = this.dataset.partnumber;
var x = this.dataset.x;
for (var i = 0; i < allPartsList.length; i++) {
if (allPartsList[i][0] == x) {
allPartsList[i][2] = supplier; //replace whatever supplier is with the supplier the user has chosen
}
}
console.log(allPartsList);
}
});
但是,我的for循环失败了,因为我不知道如何访问allPartsList
的各种元素。如果我console.log(allPartsList[0]
,我会看到
Object {line: 0, supplier: "a", partNumber: "asdf"}
所以我不确定它是否是一个我可以逐步完成的阵列。我似乎可以访问allPartsList[0]
,但我无法访问[0]
的任何元素,例如allPartsList[0][0]
。我在这里做错了什么?
答案 0 :(得分:2)
您的allPartsList
是一维对象数组,字符串键不是数字,因此allPartsList[i][0]
不正确。
要更新循环中的属性,您可以执行以下操作:
allPartsList[i].supplier = supplier;
或阅读财产:
console.log( allPartsList[i].supplier );
我不确定您在x
检查时尝试做什么,看来您想测试索引,所以在这种情况下,请对i
进行测试
if (i == x) {
旁注:您没有必要进行初始JSON解码。 PHP将生成JSON,它恰好也是有效的JavaScript。所以你可以简化为:
var allPartsList = <?php echo json_encode($all); ?>;
答案 1 :(得分:2)
根据您的日志,allPartsList是一个对象数组。您可以使用dot notation访问对象的属性。
以下是访问数组中第一个对象的供应商属性的方法:allPartsList[0].supplier
因此,请尝试将for循环更改为:
for (var i = 0; i < allPartsList.length; i++) {
if (allPartsList[i].line == x) {
allPartsList[i].supplier = supplier;
}
}