我有一个要在Javascript中编辑的PHP数组。

我将它从php传递到javascript,如下所示:

var allPartsList = JSON.parse('<?php echo json_encode($all); ?>');


如果我console.log(all);我看到以下内容:



我最终想要做的是查找从PHP传递过来的行,其中两个字段之一(partNumbersupplier为空),然后根据用户提交的值将值添加回数组中。下面的值由用户单击的复选框提供。

我有一个循环语句的语法:

$('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]。我在这里做错了什么?

最佳答案

您的allPartsList是一维对象数组,字符串键不是数字,因此allPartsList[i][0]是不正确的。

要更新循环中的属性,您可以执行以下操作:

allPartsList[i].supplier = supplier;


或读取属性:

console.log( allPartsList[i].supplier );


我不确定您要使用x检查做什么,看来您想测试索引,因此在这种情况下,请像i一样测试

if (i == x) {




旁注:您不需要初始JSON解码。 PHP将生成恰好也是有效JavaScript的JSON。因此,您可以简化为:

var allPartsList = <?php echo json_encode($all); ?>;

08-19 14:10