永发信息网

json数据排序问题

答案:2  悬赏:60  手机版
解决时间 2021-11-19 21:15
  • 提问者网友:谁的错
  • 2021-11-19 17:17
json数据排序问题
最佳答案
  • 五星知识达人网友:空山清雨
  • 2021-11-19 17:25
你写错了。
function sortJson(json,key){ 
for (var i = 0; i < json.length; i++) {
for (var j = 0; j < json.length-1; j++) {
if (json[j][key]>json[j+1][key]) {
var temp=json[j];
json[j]=json[j+1];
json[j+1]=temp;
};
};
};
return json;
};第2个循环里面的是json.length-1,不是json.length-i。
willSort集合的长度是5

外循环第一次循环:i=0;内循环的length=5.
当内循环执行第4次时,j=3,那:
json[j][key]获取到的就是下标为4个对象,也就是最后一个对象,json[j+1][key]获取的是下标为5的对象。而集合willSort集合最大下标才是4.所以当外循环第一次循环,内循环地4次循环时,才会报错
追问function pup1(obj){
for (var i = 0; i < obj.length; i++) {
for (var j=0; j if (obj[j]>obj[j+1]) {
var temp=obj[j];
obj[j]=obj[j+1];
obj[j+1]=temp;
};
};
};
return obj;
};这端代码为什么正确呢追答原因很简单,其实它if (obj[j]>obj[j+1]) 也一样,就是obj[j+1]=undefined,和我之前说的一样,一个对象是undefined不是什么大问题,但是你从undefined里面取值就是问题!它这里没有从undefined里面取值,而你却从undefined里面取值了,
如果你在它这个if里面改成你这里,也会报错,追问分析的相当到位
我这段代码是给数组排序的,数组可以看作是对象,但是json比较特殊,由名称:值组成,所以不能对underfined取值。那我以后就这样写好了
for (var i = 0; i < obj.length; i++) {
for (var j=0; j减去1的同时还要减去i,如果不减去i,就多循环了很多次,效率要低一些追答j
既然你是做排序,那这里必须是j
至于原因,你可以测试一下j
全部回答
  • 1楼网友:举杯邀酒敬孤独
  • 2021-11-19 18:43
数组越界了
当你第一次循环的时候,i=0,内层循环的结束条件就是j而当j=json.length-1时,json[j+1]的访问就造成了数组越界。。追问不会吧,外循环和内循环我定义的是二个变量i和j,当i=0时,内循环从j=0一直运行到json.length-1; j也不会等于json.length-1,只是小于啊
我是根据数组的冒泡排序思想来对json数据中根据某个值来排序

数组的冒泡排序方法,运行都是对的

那么改为json为什么会出错,错误提示是传入的key参数未定义
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯