Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将对象添加到数组javascript和关联数组?_Javascript_Jquery - Fatal编程技术网

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

将对象添加到数组javascript和关联数组?,javascript,jquery,Javascript,Jquery,我想创建一个数组filters\u array,我在控制台中注意到的第一件事是找不到filter\u组,这是保存对象的正确方法吗 第二,在第二次单击时,我希望数组增长,但此时它只是被覆盖了,我做错了什么 // var filters_array; //Ajax call to filter movies, grab them and reload container $(".option-set a").on("click", function(){ var filt

我想创建一个数组filters\u array,我在控制台中注意到的第一件事是找不到filter\u组,这是保存对象的正确方法吗

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

  //
  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;
  });

JavaScript中的关联数组只是对象。我们通常称它们为对象或映射,以避免将它们与JavaScript中的数组混淆,但现在我们忽略这一点

您想用一个空白对象初始化过滤器\u数组:

var filters_array = {};
…然后在单击处理程序中,向其中添加一个条目,其中键为filter_组变量的值,值为filter_值变量中的值:

filters_array[filter_group] = filter_value;
例如,如果filter_组的值为foo,filter_值的值为value bar,那么filters_数组上的一个属性将使用value bar命名为foo。然后,您可以通过多种方式访问该属性:

console.log(filters_array["foo"]); // "bar"
console.log(filters_array.foo);    // "bar"
var x = "foo";
console.log(filters_array[x]);     // "bar"

// Loop through all of the filter groups you've added
var key;
for (key in filters_array) {
     // here, `key` will be `"foo"` (for instance)
    console.log(filters_array[key]); // One of these will be "bar"
}

我想创建一个数组filters\u array,我在控制台中注意到的第一件事是找不到filter\u组,这是保存对象的正确方法吗

是的,这是正确的方法,但是您不能从控制台看到它,这是正确的,它是在函数的范围内声明的。但如果您需要从外部访问它,则可以执行此操作:

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\u array={filter\u group:filter\u value};换成那条线

你的意思是过滤器_数组={};过滤器\数组[过滤器\组]=过滤器\值;?除了TJ的答案之外,如果您希望它增长对象而不是过度写入对象,那么您需要使用$.extend。第一个参数是要扩展的对象,第二个参数是要扩展的数据。@Precastic:这里没有理由使用extend。@t-j-crowder你说得对。我以为他想用他已有的数据扩展ajax调用的结果。他只是想扩展过滤器。如果你读到他实际上想做什么,这是完全错误的。filter\u组应该包含一个字符串,他想将该字符串用作filter\u数组的key:value对={filter\u组:filter\u value};他想扩展这个数组。行filters\u数组={filter\u组:filter\u value};每次创建一个新对象。您包含了一条关于扩展过滤器数组的注释,但没有提到删除这一行。此外,将变量声明移到函数之外也没有效果,因为您每次都会重写它们。这并不完全正确。我告诉他,在函数之前提升变量是在函数之外访问它们的一种方式,他在问题中说,在控制台中看不到它们;这就是解决办法,至少对最后一个问题是如此。关于filters\u数组,你是对的,我的代码可以工作,但我忘了告诉他删除那行代码。无论如何,我认为这是暗示。我明白你为什么现在这么说了,但在控制台中,我认为他在谈论函数范围内的console.dir语句。我在控制台中注意到的第一件事是filter_组