我有这个用于可排序布局管理的代码。我试图在可排序 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/