初学者来了!
最近偶然发现了一个问题.基本上,程序需要通过其中一个字段对对象数组进行排序,而不实际使用sort函数.我已经使用冒泡排序算法尝试了这个代码,但它似乎没有工作:
var arrayOfPeople = [
{name: "Rick", age: 30, place: 2},
{name: "Alan", age: 25, place: 1},
{name: "Joe", age: 40, place: 4},
{name: "Dave", age: 35, place: 3}
];
function bubbleSort(a,par)
{
var swapped;
do {
swapped = false;
for (var i = 0; i < a.length - 1; i++) {
if (a[i].par > a[i + 1].par) {
var temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
swapped = true;
}
}
} while (swapped);
}
bubbleSort(arrayOfPeople,'age');
for (i = 0; i < arrayOfPeople.length; i++) {
console.log(arrayOfPeople[i]);
}
Run Code Online (Sandbox Code Playgroud)
我的猜测是我在语法方面做错了.将不胜感激任何反馈.
唯一的问题是你没有正确使用"par"参数.该obj.prop语法总是试图寻找名为"托",所以有它的动态,你需要使用方括号如OBJ ["托"]可以得到变量,而不是"托"属性.
你没有得到任何错误,a[i].par并且a[i+1].par两者都返回undefined,可以与自身进行比较.(因此a[i].par > a[i+1].par总是返回false)
以下是修改后的代码:
function bubbleSort(a, par)
{
var swapped;
do {
swapped = false;
for (var i = 0; i < a.length - 1; i++) {
if (a[i][par] > a[i + 1][par]) {
var temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
swapped = true;
}
}
} while (swapped);
}
bubbleSort(arrayOfPeople, 'age');
for (i = 0; i < arrayOfPeople.length; i++) {
console.log(arrayOfPeople[i]);
}
Run Code Online (Sandbox Code Playgroud)
值得一提的是,在这种情况下,改变实际对象的函数(在这种情况下是数组)并不是一件小事.要了解更多的东西是按值传递,什么是按引用传递采取这个很好的问题,一看:是JavaScript的一个传递引用或传址值的语言?
使用内置的数组排序功能:
arrayOfPeople.sort(function(a,b) {return a.age-b.age;});
Run Code Online (Sandbox Code Playgroud)