我正在尝试使用属性 page 对对象数组进行排序。这是在使用Vue的计算属性中完成的。
为此,我使用以下函数,该函数首先构建对象:
sorted: function(){
var pages = this.selectedKKS['pages'];
var list;
try {
list = [];
Object.keys(pages).forEach(function(key){
console.log(key + " is the key")
var obj = {};
obj.title = key;
obj.page = pages[key]
list.push(obj)
});
}
catch(e){
console.log(e);
}
var sorted = list.sort(function(a, b){
console.log('a.page is ' + a.page + ' and b.page is ' + b.page);
return a.page > b.page;
});
return sorted;
}
为了确保我实际上正在按照我的意图比较页面,这是控制台日志:
a.page is 84 and b.page is 28
App.vue?077f:353 a.page is 84 and b.page is 46
App.vue?077f:353 a.page is 28 and b.page is 46
App.vue?077f:353 a.page is 84 and b.page is 35
App.vue?077f:353 a.page is 46 and b.page is 35
App.vue?077f:353 a.page is 28 and b.page is 35
App.vue?077f:353 a.page is 84 and b.page is 14
App.vue?077f:353 a.page is 46 and b.page is 14
App.vue?077f:353 a.page is 35 and b.page is 14
App.vue?077f:353 a.page is 28 and b.page is 14
App.vue?077f:353 a.page is 84 and b.page is 5
App.vue?077f:353 a.page is 46 and b.page is 5
App.vue?077f:353 a.page is 84 and b.page is 8
App.vue?077f:353 a.page is 5 and b.page is 8
我在我的模板中循环遍历这个计算属性,因为它被错误地排序,它给了我一个不理想的结果:
<f7-list>
<f7-list-item v-for="val in sorted" @click="openpdf(selectedKKS.url, val.page)">
<f7-col><span style="color: black">{{ val.title }}</span></f7-col>
<f7-col>{{ val.page }}</f7-col>
</f7-list-item>
</f7-list>
关于可能出现什么问题的任何想法?
答案 0 :(得分:1)
因为值是字符串,所以它们以词法(字母)而不是数字顺序排序。
按如下方式更改排序功能:
list.sort(function(a, b){
return Number(a.page) > Number(b.page);
});
或者更好的是:
list.sort(function(a, b){
return Number(a.page) - Number(b.page);
});
如评论中所述,在对象创建过程中进行数字转换更好,以避免在每次比较时重复执行数字转换。
答案 1 :(得分:1)
尝试&#39; - &#39;相反&#39;&gt;&#39;内部排序函数..
var sorted = list.sort(function(a, b){
console.log('a.page is ' + a.page + ' and b.page is ' + b.page);
return a.page - b.page;
});
希望它有所帮助!!
答案 2 :(得分:0)
回调函数必须返回一个int数。返回&lt; 0,eq返回0,gt返回&gt; 0