我有此代码用于可排序的布局管理。我正在尝试获取可排序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页面,这表明有一个空数组正在发布到该页面上
答案 0 :(得分:1)
问题是您使用数组作为 map ,数组不适合此操作。在JS中,数组是一种特殊的对象类型,具有自己的一组方法,所有内容都假定它由整数属性键和一个length
属性组成,该属性指定数组包含多少个项目。
通过设置数组的非整数属性,其length
属性不会更改,因此,数组最终以length == 0
结尾。这就是JSON.stringify()
方法的结果,它看到数组的length
为零,这就是为什么您在JSON中得到一个空数组的原因。
JSON.stringify()
可以正确处理它。换句话说,您的finalArr
属性应该是普通对象,因此请将finalArr = []
更改为finalArr = {}
。finalArr[nowRow] = []
。finalArr[nowRow] = {}
就可以了。我希望这有助于解释和解决您的问题。
P.S。您应该将finalArr[nowRow][nowCol] = []
放在var
声明的前面。省略时,实际上是在将finalArr
对象作为属性添加到finalArr
对象上。这是一种不好的做法,并且可能导致难以解决的错误。 window
和nowRow
的声明也是如此。