Javascript关联数组不将子数组作为值

标签 javascript jquery arrays json associative-array

我有这个用于可排序布局管理的代码。我试图在可排序 stop() 之后获取每个 div 的位置。现在,我能够将数组中的所有内容就位,但数组计数似乎为 0 并且数据未发送到另一个页面。

    console.clear();
    finalArr = [];
    $(".rowSortable").each(function(){
      nowRow = $(this).attr('class').substr(4,5);
      finalArr[nowRow] = [];
      $(this).find(".connectedSortable").each(function(){
        nowCol = $(this).attr('class');
        nowCol = nowCol.substr(0,nowCol.indexOf(" connectedSortable"));
        finalArr[nowRow][nowCol] = [];
        $(this).find(".sortable").each(function(){
          finalArr[nowRow][nowCol].push($(this).data("field"));
        });
      });
    });
    console.log(finalArr);
    console.log(JSON.stringify(finalArr));

对于console.log(finalArr);

home:1094
[row_1: Array(0), row_2: Array(0)]
    row_1: Array(0)
        col-md-12: Array(1)
            0: "Dog"
            length: 1
            __proto__: Array(0)
        length: 0
        __proto__: Array(0)
    row_2: Array(0)
        col-md-5: Array(3)
            0: "Cat"
            1: "Tiger"
            2: "Rat"
            length: 3
            __proto__: Array(0)
        col-md-7 left-column: Array(2)
            0: "Lion"
            1: "elephant"
            length: 2
        __proto__: Array(0)
        length: 0
    __proto__: Array(0)
    length: 0
__proto__: Array(0)

对于console.log(JSON.stringify(finalArr));

home:1095 []

我还尝试通过ajax发送finalArr到PHP页面,它显示一个空数组被发布到该页面

最佳答案

问题是您使用数组作为 map ,数组不适合于此。在 JS 中,数组是一种特殊类型的对象,有自己的一组方法,并且一切都假设它由整数属性键和 length 组成。属性指定它包含多少个项目。

通过设置数组的非整数属性,其 length属性不会改变,因此,您的数组最终为 length == 0 。这就是JSON.stringify()方法查看,它看到数组的 length为零,这就是为什么您在 JSON 中得到一个空数组。

  • 普通对象更适合这种情况,因为它们的属性是任意的并且 JSON.stringify()妥善处理它。换句话说,您的finalArr属性应该是一个普通对象,因此更改 finalArr = []进入finalArr = {} .
  • 在每个上,都有,它们也是非整数属性,因此您还需要一个普通对象,因此更改 finalArr[nowRow] = []进入finalArr[nowRow] = {} .
  • 然后在每一列中,您实际上都正确使用了数组,因为您实际上正在推送它,所以 finalArr[nowRow][nowCol] = []就这样就好了。

我希望这有助于解释和解决您的问题。

附注你应该输入 var在你的面前finalArr声明。当你省略它时,你实际上做的是添加 finalArr作为 window 上的属性目的。这是一种不好的做法,可能会导致难以排除故障的错误。 nowRow 的声明也是如此。和nowCol .

关于Javascript关联数组不将子数组作为值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54377728/

相关文章:

jquery - 如何使用 JQuery.ajax 从每个 WordPress 帖子中获取缩略图附件?

php - 在 PHP 中从线性数组创建关联数组

jquery - 如何用css3实现图像贴纸(ribbon)

jquery - rails 上的 ruby : submit a form clicking a check_box using JQuery

c - C 中字符串的一些问题

javascript - 检查数组中的对象值是否已经存在于不同的对象数组中?

javascript - 改变mozilla插件工具提示框的样式

javascript - PHP/Ajax/JQuery 响应无法正常工作

javascript - 在 Magento 中为单选框添加标签

javascript - Three.js 中的计时 - 用于互动短片