json数据排序问题
functionsortJson(json,key){for(vari=0;i<json.length;i++){for(varj=0;j<json.length-i;j...
function sortJson(json,key){
for (var i = 0; i < json.length; i++) {
for (var j = 0; j < json.length-i; j++) {
if (json[j][key]>json[j+1][key]) {
var temp=json[j];
json[j]=json[j+1];
json[j+1]=temp;
};
};
};
return json;
};
我封装上面的排序json的函数,可以运行时提示传入的参数key未定义
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<style type="text/css">
</style>
<script type="text/javascript">
window.onload=function(){
var willSort = [{name:'shangwenhe',age:25,height:170},
{
name:'zhangsan',
age:31,
height:169
},
{
name:'lisi',
age:31,
height:167
},
{
name:'zhaowu',
age:22,
height:160
},
{
name:'wangliu',
age:23,
height:159
}
];
function sortJson(json,key){
for (var i = 0; i < json.length; i++) {
for (var j = 0; j < json.length-i; j++) {
if (json[j][key]>json[j+1][key]) {
var temp=json[j];
json[j]=json[j+1];
json[j+1]=temp;
};
};
};
return json;
};
var a=sortJson(willSort,'age');
console.log(a);
};
</script>
</head>
<body>
</body>
</html> 展开
for (var i = 0; i < json.length; i++) {
for (var j = 0; j < json.length-i; j++) {
if (json[j][key]>json[j+1][key]) {
var temp=json[j];
json[j]=json[j+1];
json[j+1]=temp;
};
};
};
return json;
};
我封装上面的排序json的函数,可以运行时提示传入的参数key未定义
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<style type="text/css">
</style>
<script type="text/javascript">
window.onload=function(){
var willSort = [{name:'shangwenhe',age:25,height:170},
{
name:'zhangsan',
age:31,
height:169
},
{
name:'lisi',
age:31,
height:167
},
{
name:'zhaowu',
age:22,
height:160
},
{
name:'wangliu',
age:23,
height:159
}
];
function sortJson(json,key){
for (var i = 0; i < json.length; i++) {
for (var j = 0; j < json.length-i; j++) {
if (json[j][key]>json[j+1][key]) {
var temp=json[j];
json[j]=json[j+1];
json[j+1]=temp;
};
};
};
return json;
};
var a=sortJson(willSort,'age');
console.log(a);
};
</script>
</head>
<body>
</body>
</html> 展开
2个回答
展开全部
你写错了。
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[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里面改成你这里,也会报错,
展开全部
数组越界了
当你第一次循环的时候,i=0,内层循环的结束条件就是j<json.length
而当j=json.length-1时,json[j+1]的访问就造成了数组越界。。
当你第一次循环的时候,i=0,内层循环的结束条件就是j<json.length
而当j=json.length-1时,json[j+1]的访问就造成了数组越界。。
追问
不会吧,外循环和内循环我定义的是二个变量i和j,当i=0时,内循环从j=0一直运行到json.length-1; j也不会等于json.length-1,只是小于啊
我是根据数组的冒泡排序思想来对json数据中根据某个值来排序
数组的冒泡排序方法,运行都是对的
那么改为json为什么会出错,错误提示是传入的key参数未定义
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询