将对象添加到数组javascript和关联数组?

时间:2013-06-17 09:03:21

标签: javascript jquery

我想创建数组filters_array,我在控制台中注意到的第一件事是无法找到filter_group,这是保存对象的正确方法吗?

第二,在第二次点击时我希望数组增长,但此时它只会被覆盖,我做错了什么?

  //
  var filters_array;

  //Ajax call to filter movies, grab them and reload container
  $(".option-set a").on("click", function(){

    var filter_value = $(this).data("filter-value");
    var filter_group = $(this).parents("ul").data("filter-group");

    filters_array = {filter_group : filter_value};
    console.dir(filters_array);

    $.ajax({
      url: templatePath + "getmovies.php",
      type: "GET",
      data: "",
      cache: false,
      success: function (data){
        console.dir("ajax call success!");
      }
    });

    return false;
  });

2 个答案:

答案 0 :(得分:0)

"关联数组"在JavaScript中只是对象。我们通常称他们为#34;对象"或者"映射",以避免将它们与"数组"混淆(JavaScript中aren't really arrays,但暂时忽略它。)

您想要使用空白对象初始化filters_array

var filters_array = {};

...然后在点击处理程序中添加一个条目,其中键是filter_group变量的值,值是filter_value变量中的值:

filters_array[filter_group] = filter_value;

例如,如果filter_group的值为"foo"filter_value的值为"bar",那么您最终会在{{1}上找到属性名为filters_array的{​​{1}}值为foo。然后,您可以通过多种方式访问​​该属性:

"bar"

答案 1 :(得分:0)

  

我想创建数组filters_array,我在控制台中注意到的第一件事是无法找到filter_group,这是保存对象的正确方法吗?

是的,这是正确的方法,但是你无法从控制台看到它,它是在函数范围内声明的。但是如果你需要从外面访问它,你可以这样做:

var filters_array, filter_value, filter_group; //hoisted here

  //Ajax call to filter movies, grab them and reload container
  $(".option-set a").on("click", function(){

    filter_value = $(this).data("filter-value");
    filter_group = $(this).parents("ul").data("filter-group");

    filters_array = {filter_group : filter_value};
    console.dir(filters_array);

    $.ajax({
      url: templatePath + "getmovies.php",
      type: "GET",
      data: "",
      cache: false,
      success: function (data){
        console.dir("ajax call success!");
      }
    });

    return false;
  });
  

第二,在第二次点击时我希望数组增长,但此时它只会被覆盖,我做错了什么?

嗯,这很简单,你要再次初始化它,每次都要为它分配一个新对象,你必须这样做:

filters_array[filter_group] = filter_value;

filters_array空对象分配到之后的功能范围。显然,您需要删除filters_array = {filter_group : filter_value};并将其替换为该行!