我的JavaScript对象需要以基于id的反向方式排序。
这是我的JavaScript对象:
var model.todos =
{
1:{"id":1,"text":"ksjdv;lv","completed":false},
2:{"id":2,"text":"lsakckcv","completed":false},
3:{"id":3,"text":"sakvalvs","completed":false}
}
当我尝试按照下面的指定排序时,我得到"未被捕获的类型错误未定义不是函数"错误
sortId.addEventListener('click',function(){
todos.sort(sortItems);<================//get uncaught type error undefined is not a function error
redrawUI(model);
}, false);
function sortItems(a, b) {
return( b.id - a.id);
}
任何指针
答案 0 :(得分:0)
嗯,首先,javascript对象是一个字典;我不确定尝试对字典进行排序是个好主意;它可能是可行的,然而,它可能不会给出最好的表现。您应该选择数组,而不是javascript对象。 类似的东西:
var todos = [{id:1}, {id:2]}, {id:3}];
todos.sort(function (a, b) { return b.id - a.id; });
答案 1 :(得分:0)
问题是todos是对象的对象,而函数sort
是用于数组的,所有你需要做的就是将你的todos转换为数组并对数组进行排序
var todos_array = [];
for(key in model.todos)
todos_array.push(model.todos[key]);
然后你可以对你的数组进行排序:
todos_array = todos_array.sort(sortItem);
答案 2 :(得分:0)
阵列比其他人提到的更容易排序。我想补充一点,你的第一行是有问题的:你声明一个包含&#39;的变量。变量名中不允许使用点和点。
你可能打算做这样的事情:
var model = {}; // serves as a namespace for your models
model.todos = {
1:{"id":1,"text":"ksjdv;lv","completed":false},
2:{"id":2,"text":"lsakckcv","completed":false},
3:{"id":3,"text":"sakvalvs","completed":false}
}