我有一个看起来像这样的对象数组:
var data = [
{
title: 'Shirt',
position: 3
},
{
title: 'Ball',
position: 1,
}
]
我怎样才能将它排序以便在像这样的
for loop
中使用。
for(var i in data) {
}
我尝试过:
for(var i in data | orderBy:'position')
但是这是有角度的,所以普通的 Javascript 不起作用。
我认为他们必须有某种方法在循环之前对数组进行排序,或者在循环中添加过滤器,不确定哪种方法是最好的方法。
但是这是有角度的,所以普通的 Javascript 不起作用。
您只需使用 JavaScript sort 函数即可。它也适用于 Angular(TypeScript)。
注意:对数字进行排序时,可以简单地使用紧凑比较:
myArray.sort((n1,n2) => n1 - n2);
var data = [
{
title: 'Shirt',
position: 3
},
{
title: 'Ball',
position: 1,
}
];
data.sort(function(a, b) {
return a.position- b.position;
})
console.log(data);
使用
Array.prototype.sort
(doc) 并根据需要传递比较函数:
var data = [
{
title: 'Shirt',
position: 3
},
{
title: 'Ball',
position: 1,
},
// add for actually seeing the correct result
{
title: 'Cake',
position: 2,
}
];
function compareFunction(a,b){
if(a.position > b.position)
return 1;
else
return -1;
}
data.sort(compareFunction);
console.log(data);
您可以使用 arr.sort([compareFunction])。
如果compareFunction(a, b)小于0,则将a排序到低于b的索引,即a排在前面。
如果compareFunction(a, b)返回0,则a和b相对于彼此保持不变,但相对于所有不同元素进行排序。
如果compareFunction(a, b)大于0,则将b排序到低于a的索引,即b排在前面。
当给定一对特定的元素 a 和 b 作为其两个参数时,compareFunction(a, b) 必须始终返回相同的值。如果返回的结果不一致,则排序顺序未定义。例如-
myarray.sort((a,b) => {
if(a.position > b.position)
return 1
else
return -1
})
var data = [{
title: 'Shirt',
position: 3
},
{
title: 'Ball',
position: 1,
},
{
title: "h",
position: 0
}
]
for (let i = 0; i < data.length; i++)
for (let j = 0; j < data.length - 1; j++) {
if (data[j].position > data[j + 1].position) {
var first = data[j]
var second = data[j + 1]
data[j] = second;
data[j + 1] = first;
}
}
console.log(data)