gpt4 book ai didi

javascript - 在 javascript 中使用 Array.sort() 时,以下情况有什么区别?

转载 作者:行者123 更新时间:2023-12-04 03:53:00 25 4
gpt4 key购买 nike

CASE 1:

let items = [
{ name: "Edward", value: 21 },
{ name: "Shane", value: 37 },
{ name: "Daniel", value: 45 },
{ name: "Daniel", value: -12 },
{ name: "Magnetic", value: 13 },
{ name: "Magnetic", value: 37 },
];

items.sort(function (a, b) {
if (a.name<b.name) {
return -1;
}
if (a.name>b.name) {
return 1;
}
// names must be equal
return 0;
});

console.log(items);

CASE 2:

let items = [
{ name: "Edward", value: 21 },
{ name: "Shane", value: 37 },
{ name: "Daniel", value: 45 },
{ name: "Daniel", value: -12 },
{ name: "Magnetic", value: 13 },
{ name: "Magnetic", value: 37 },
];

items.sort(function (a, b) {
if (a.name<b.name) {
return -1;
}
if (a.name>b.name) {
return 1;
}
// no case for equal names
});

console.log(items);

CASE 3:

items.sort(function (a, b) {
return a.name < b.name ? -1 : 1;
});

All three return the following

[
{ name: 'Daniel', value: 45 },
{ name: 'Daniel', value: -12 },
{ name: 'Edward', value: 21 },
{ name: 'Magnetic', value: 13 },
{ name: 'Magnetic', value: 37 },
{ name: 'Shane', value: 37 }
]

上面提到的所有片段都返回相同的结果,但肯定有一些示例所有这些都返回不同的结果(我不知道)。我想知道当没有名称相等的返回条件时会发生什么。

更新:我在原始问题中添加了案例 3​​,实际上案例 1 和案例 2 的行为相似,因为案例 2 在名称相等时返回 undefined。但是在我使用三元运算符的情况 3 中,它不会返回 undefined 但答案仍然相同。怎么做?

最佳答案

您的代码的主要问题是您正在比较没有意义的对象。所以你应该对对象中的属性进行排序。看看测试做了什么。

var a = { foo: 1 };
var b = { foo: 2 };

console.log("a > b", a > b);
console.log("a > b", a < b);
console.log("a == b", a == b);

所以在您的排序中,您实际上在每次检查中都有相同的结果。这没有道理。您需要查看对象中的数据。您应该检查 3 个状态 1) SAME、2) Greater 和 3) Less Than。

如果您没有为每个状态返回正确的值,您可能会遇到浏览器每次都对项目进行不同排序的情况。在你的情况下,当它相等时你不会返回任何东西,这将被视为 undefined 并且我们是一个错误的值所以可能应该是 0 这是相等的。当您只返回 1 和 -1 时,您会让浏览器做更多的工作,因为每次进行比较时它都会获得不同的值。这将导致排序顺序不同,并且可能会花费额外的时间,因为它会进行额外的计算。

let items = [
{ name: "Car", value: 100 },
{ name: "Apple", value: 21 },
{ name: "Car", value: 13 },
{ name: "Far", value: 37 },
{ name: "Apple", value: 10 },
{ name: "Bar", value: 45 }
];


items.sort( function (a, b) {

// if names are equal lets sort on value
if (a.name === b.name) {
if (a.value === b.value) {
return 0;
} else if (a.value > b.value) {
return 1;
} else {
return -1;
}
}
else if (a.name > b.name) {
return 1;
}
else {
return -1;
}
});

console.log(items);

清理代码

let items = [
{ name: "Car", value: 100 },
{ name: "Apple", value: 21 },
{ name: "Car", value: 13 },
{ name: "Far", value: 37 },
{ name: "Apple", value: 10 },
{ name: "Bar", value: 45 }
];

items.sort( function (a, b) {

// if names are equal lets sort on value
if (a.name === b.name) {
if (a.value === b.value) {
return 0;
} else {
return (a.value > b.value) ? 1 : -1;
}
} else {
return a.name.localeCompare(b.name);
}
});

console.log(items);

关于javascript - 在 javascript 中使用 Array.sort() 时,以下情况有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64173016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com