Javascript动态创建多维数组

时间:2014-03-20 14:41:16

标签: javascript arrays multidimensional-array

我现在已经花了一天多的时间了,并且无法让它发挥作用。我想创建一个多维javascript数组,其中包含过滤器变量,必须将其转换为php以进行AJAX调用。目标是制作产品过滤器并过滤掉不适用于过滤器变量的产品。

最后一部分是php,我知道如何解决这个问题。但我正在努力创建一个包含所有选定过滤器变量的javascript数组。

我有filter_IDfilter_value_ID。使用过滤器(例如大小),可以有不同的值,如S,M,L,XL等。

所以我想要一个这样的数组:

filterArr = array(
  [4] => array(10,20,30)
  [8] => array(4)
  [20] => array(2,3, 7)
)

当用户选中复选框时,必须填充数组。我几乎管理它,但问题是我在数组中得到null个项目,因为我无法在数组中获取filterID。

我的代码在JSFiddle上:http://jsfiddle.net/VCfjp/

出错的部分在第10,11,12行:

if (!(filterID in filter)) {
  filter[filterID] = [];
}

此刻我正陷入困境。我会知道如何在PHP中执行此操作,但无法在javascript中使用它。一些帮助表示赞赏! Offcourse我一直在寻找论坛上的其他主题,但找不到任何匹配的东西。

1 个答案:

答案 0 :(得分:1)

JS中的哈希数组被定义为对象,因此请使用它:

var object = { 4: [10,20,30], 8: [4], 20: [2,3,7] };

只需观察PHP在发布时输出的内容:

echo json_encode(array( [4] => array(10,20,30) [8] => array(4) [20] => array(2,3, 7) ));

您要求的代码:

jQuery(document).ready(function($) { var hashArray = {}; $('.myCheckbox').on('change', function() { var self = $(this), checkboxId = parseInt(self.attr('data-id')), // since you used it as a number above checkboxValue = parseInt(self.val()); // since you also used it as a number above if (self.is(':checked')) { // add to array if (!hashArray.hasOwnProperty(checkboxId)) hashArray[checkboxId] = []; hashArray[checkboxId].push(checkboxValue); } else { if (hashArray.hasOwnProperty(checkboxId)) { // remove from array if it exists hashArray[checkboxId].splice(hashArray[checkboxId].indexOf(checkboxValue), 1); } } }); });