gpt4 book ai didi

javascript - 排序功能说明

转载 作者:行者123 更新时间:2023-11-29 10:27:03 26 4
gpt4 key购买 nike

我是 JavaScript 编程的新手。我的一位团队成员编写了一段我并不真正理解的代码,而且由于语言障碍,该人无法正确解释它。

该代码应该用于对网站上的项目进行排序。我知道 changeOptionValue 函数由 switch 语句组成。我们有 3 个案例,最低、最高和字母顺序。我们通过 sort.method 在每个实例中调用下面定义的 sort_by 变量。

参数('price'、false、parseFloat)指的是不同的东西。第一个参数用于设置列表。第二个参数用于设置测试条件(问题:为什么小写为false,高写为true)。第三个参数parseFloat用于显示内容,是一个 float 。

总的来说,我不明白的是函数表达式var sort_by。 primer是指 float 吗?因此,如果我检查 primer!=null 并检查它是否是 float 并返回该字段中的数字。在第二种情况下,我只是检索字符串并按字母顺序检查它们。

最后,我使用相反的方式对 (a>b) 部分按字母顺序表示的事物进行逻辑排序。

function changeOptionValue() {
var option = document.getElementById("optionMenu").value;
var toOrder = getProducts();
switch (option) {
case "lowest":
toOrder.sort(sort_by('price', false, parseFloat))
break;
case "highest":
toOrder.sort(sort_by('price', true, parseFloat))
break;
case "alphabetical":
toOrder.sort(sort_by('name', false, ))
break;
default:
break;
}
setProducts(toOrder);
generateShopDOM()
}

var sort_by = function (field, reverse, primer) {
//To get the value of the object (name or price)
var key;
if (primer!=null){
key= function (x) { return primer(x[field]) }
} else{
key= function (x) { return x[field] };
}

//if you want it low to high or vice versa
if(reverse==true){
reverse=-1;
}else{
reverse=1;
}

return function (a, b) {
return a = key(a), b = key(b), reverse * ((a > b) - (b > a));
}
}

最佳答案

作为快速入门,Array​.prototype​.sort()对给定的数组进行排序,默认情况下按字典顺序排序,或者使用比较器函数定义排序顺序。

在您的代码示例中,函数 sort_by(...) 是一个高阶函数,如果您愿意的话,它是一个工厂函数,它根据给定的参数创建比较器函数。让我们按顺序查看它的参数:

  • field 是比较对象中用于比较的字段;
  • reverse 定义排序是升序还是降序;
  • primer 也可以称为解析器或规范化器,它是一个可选的函数,用于标准化输入值。

在上面的例子中,parseFloat()用于标准化值。请注意,该函数未被调用,而是作为参数传递并稍后被调用。 primer != null 条件检查是否定义了解析器,如果定义了,则在比较之前使用它来规范化值。

return 语句 (a > b) - (b > a) 是比较值的规范安全方式,参见 this answer有关这方面的更多信息。

为了将所有这些置于上下文中,调用

toOrder.sort(sort_by('price', true, parseFloat))

将创建一个比较器函数(sort_by 的返回值),然后使用该函数使用 'price' 中的值对 toOrder 数组进行排序 字段,以相反的顺序返回(reverse === true),在比较之前将字段值解析为 float (primer === parseFloat)。

关于javascript - 排序功能说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56429162/

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