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

Add objects to array javascript, and associative array?

本文关键字:数组 关联 javascript 添加 对象      更新时间:2023-09-26

我想创建数组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;
  });

JavaScript中的"关联数组"就是简单的对象。我们通常称它们为"对象"或"映射",以避免与"数组"混淆(它们在JavaScript中并不是真正的数组,但现在让我们忽略它们)。

你想用一个空白对象初始化你的filters_array:

var filters_array = {};

…然后在click处理程序中,为其添加一个条目,键为filter_group变量的值,值为filter_value变量中的值:

filters_array[filter_group] = filter_value;

例如,如果filter_group的值为"foo", filter_value的值为"bar",那么你最终会在filters_array上得到一个名为foo的属性,其值为"bar"。然后,您可以通过以下几种方式访问该属性:

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_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};并将其替换为该行!