关于 JS 数组,对象 length 使用的坑
场景: laravel中前端请求后端返回一个数组,返回格式如下:
$data = [ "datalist" =>
[ 16 => ["name" => "钢筋工",
"count" => 55,
"num" => 16 ],
46 => [ "name" => "木工二班",
"count" => 57,
"num" => 46 ],
25 =>[ "name" => "塔吊",
"count" => 6,
"num" => 25 ],
31 => [ "name" => "机电",
"count" => 5,
"num" => 31 ],
],
"other" => 0,
"count" => 188 ,
];
JS中拿到数据是个对象,前端获取对象长度使用了(假如返回值用res接收)
var len = res.datalist.length
结果len的值是undefined.
解决:
方案1:
$data = [ "datalist" =>
[ 0 => ["name" => "钢筋工",
"count" => 55,
"num" => 16 ],
1 => [ "name" => "木工二班",
"count" => 57,
"num" => 46 ],
2 =>[ "name" => "塔吊",
"count" => 6,
"num" => 25 ],
3 => [ "name" => "机电",
"count" => 5,
"num" => 31 ],
],
"other" => 0,
"count" => 188 ,
];
将datalist变成从0开始的索引数组就好了(用了函数array_values()从新排序了),这样计算出来的长度len = 4;
方案2:
var arr = Object.keys(res.datalist);
var len = arr.length; //4
这样的结果len也是4;
总结: 因为方便写后续的代码,我选择了方案1 ,感觉JS的数组(从0按顺序排序)和对象(key值也是0,1,2排序)就是一样一样的。
本作品采用《CC 协议》,转载必须注明作者和本文链接
伪数组得不到 length,Object.keys 写错了,Object.values
@likunyan 这个是我运行过的,keys跟values都能能拿到长度吧,key跟value是一一对应的,数组是有序的,对象是无序的,但是对象key是0,1,2这样有序的,其实就可以像数组那样获得length,获取对象也可以object[0],就跟数组差不多啦