我有一个在Firefox中正常运行的javascript,但它在chrome中不起作用! 代码是两个数组列表,用于按字母顺序对电影列表进行排序。 从A到Z的一个列表和一个Z到A的列表。
任何想法我做错了什么? 非常感谢
var Movies = ["Pulp Fiction", "The Dark Knight", "Fight Club", " Terminator", "Matrix", "American History X", "Memento "];
function listMovies()
{
document.writeln("<b>Movies sort from A to B:</b>");
document.writeln(Movies.sort().join("<br>"));
document.writeln("<br><b>Movies sort from B to A:</b>");
document.writeln(Movies.sort(function(a, b){return b-a}).join("<br>"));
}
listMovies();
答案 0 :(得分:1)
首先,您可能不应该使用document.writeLn
。几乎没有必要。改为使用DOM方法。
然而,问题是你的代码试图在计算相对位置时从另一个字符串中减去一个字符串:
Movies.sort(function(a, b){return b-a})
这适用于数字(4 - 2 === 2
),但不适用于字符串('Terminator' - 'American History'
是NaN
)。
您需要与<
和>
进行比较,这会让您的功能更加复杂:
function listMovies()
{
document.writeLn("<b>Movies sort from A to B:</b>");
document.writeLn(Movies.sort().join("<br>"));
document.writeLn("<br><b>Movies sort from B to A:</b>");
document.writeLn(Movies.sort(function(a, b){
if (b === a) return 0;
if (b > a) return 1;
return -1;
}).join("<br>"));
}
你有一个奇怪之处是Terminator
有一个前导空格,这会使它按字母顺序排在列表的开头。
答案 1 :(得分:1)
两个问题:
你在终结者面前有一个空间,它会把结果丢掉。
你的&#34; B到A&#34;函数在字符串上使用-
运算符,这不会给你可靠的结果。
要解决#2,请使用不会尝试减去字符串的函数:
document.writeln(Movies.sort(function(a, b){
return a == b ? 0 : (a < b ? 1 : -1)
}).join("<br>"));
附注:我避免使用document.writeln
和类似的内容。
答案 2 :(得分:0)
这个DEMO怎么样?
var Movies = ["Pulp Fiction", "The Dark Knight", "Fight Club", " Terminator", "Matrix", "American History X", "Memento "];
function listMovies(){
for(var i=0;i<Movies.length;i++){
Movies[i] = Movies[i].trim();
}
document.writeln("<b>Movies sort from A to B:</b>");
document.writeln(Movies.sort().join("<br>"));
document.writeln("<br><b>Movies sort from B to A:</b>");
document.writeln(Movies.sort(function(a, b){return b-a}).join("<br>"));
}
listMovies();