orderBy不按预期工作:AngularJS

在使用AngularJS时,orderBy是一种经常使用的筛选器。它可用于对数组进行排序和过滤,并且可以与ngRepeat指令一起使用。然而,有时 orderBy 不按预期工作,这可能会导致代码中出现意想不到的错误。

问题描述

假设你有一个类似如下的数组:

------------ - -
  - ----- -------- ------ ----- --------- - --
  - ----- --------- ------ ----- --------- -- --
  - ----- --------- ------ ----- --------- - --
  -----
--

你希望按照产品价格从高到低对该数组进行排序。为此,你在HTML中使用了以下代码:

---- --------------- -- ----- - ------------------
  -- --------- -- - -- ---------- --
------

但当你运行应用程序时,却发现商品的顺序并未按照价格排序,而是按照名称排序。

原因分析

这个问题的原因是字典排序。默认情况下,AngularJS的 orderBy 筛选器使用字典排序,也称为字符串排序。这意味着,如果要对数字进行排序,则需要将它们转换为字符串,并按照字符串进行比较。例如,将数字10和数字2转换为字符串后,它们将被视为'10''2'进行比较,这样就会导致排序错误。

解决方案

解决此问题的方法是使用自定义比较器函数。自定义比较器函数可以对每个元素进行比较,并根据需要返回-101。这些值告诉orderBy筛选器如何排序数组。

以下是一个示例代码,演示如何使用自定义比较器函数来按数字大小对数组进行排序:

------------------ - -------- --- -- -
  ------ ------- - --------
--

在HTML中,你可以使用以下代码调用该函数来对数组进行排序:

---- --------------- -- ----- - ---------------------
  -- --------- -- - -- ---------- --
------

这段代码会将 sortByPrice 函数传递给 orderBy 筛选器。每次筛选器需要比较两个元素时,都会调用该函数,以确定它们的顺序。

结论

在AngularJS中,orderBy 是一个非常有用的筛选器,可用于对数组进行排序和过滤。但是,由于默认情况下它使用字典排序,可能会导致一些问题。为了解决这些问题,我们可以使用自定义比较器函数,它允许我们对每个元素进行比较并按照需要排序数组。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/28900


猜你喜欢

  • Angular中方括号用途解析

    在Angular框架中,方括号([])是一种常见的语法结构。它们用于实现组件之间的数据传递,并且被认为是Angular应用程序中重要的概念之一。 方括号的基本用法 方括号主要用于数据绑定,用于将属性值...

    7 年前
  • SPAs(单页应用)适合移动端网站吗?

    随着移动设备的普及,越来越多的网站开始考虑如何为移动用户提供更好的体验。SPAs(单页应用)作为一种现代的前端开发方法,也被广泛应用于移动端网站的开发中。但是否所有移动端网站都适合采用SPAs呢?本文...

    7 年前
  • 优秀的涉及浏览器和 DOM 的 JavaScript API 参考文档

    JavaScript 是前端开发中至关重要的语言。在使用 JavaScript 开发应用程序时,掌握相关的 API 以及了解其可用选项非常重要。 在这篇文章中,我将介绍一些优秀的 JavaScript...

    7 年前
  • 懒加载:渐进式 vs 需求驱动

    懒加载是一种提高网站性能的技术,它可以推迟加载页面上某些元素,直到用户需要访问它们。在前端开发中,懒加载通常用于加载图片、视频和音频等资源。 在懒加载方案中,通常有两种方法:渐进式懒加载和需求驱动懒加...

    7 年前
  • 为什么 JavaScript 中的 `getMonth` 从0开始计数,而 `getDate` 却从1开始计数?

    在 JavaScript 中,日期对象有两个方法可以获取日期:getMonth 和 getDate。这两个方法的行为看起来有些奇怪,因为它们的返回值并不是我们期望的那样。

    7 年前
  • JavaScript 运行时中如何表示闭包和作用域

    JavaScript 是一种基于对象和事件驱动的脚本语言,它的重要特征之一是支持函数式编程风格。在 JavaScript 中,函数可以像普通变量一样被定义、传递和使用。

    7 年前
  • 从命令行中如何检查 JavaScript 代码的语法错误?

    JavaScript 是前端领域中最常用的编程语言之一,但由于人为因素或其他原因,我们写的代码可能会包含语法错误。在开发过程中,要及时发现并修复这些错误是非常重要的。

    7 年前
  • JavaScript 自动完成搜索框,是否必须使用 "input" 事件处理程序?

    在前端开发中,自动完成搜索框是一项非常重要的任务。对于这种任务,我们需要一个强大的 JavaScript 完成搜索框组件。但是,我们是否一定要使用 "input" 事件处理程序来实现它呢?在本文中,我...

    7 年前
  • 如何配置 jshint 避免 "Bad line breaking before" 错误?

    在前端开发中,我们经常需要使用代码检查工具来确保代码的质量和一致性。其中一个流行的工具是 JSHint,它可以帮助我们找出潜在的问题并提供更好的代码提示。 然而,在使用 JSHint 进行代码检查时,...

    7 年前
  • AngularJS:如何在动态列表中使用ng-repeat,而无需重新构建整个DOM树?

    AngularJS是一个流行的前端框架,它提供了许多有用的指令和功能来简化Web开发。其中一个最常用的指令是ng-repeat,它可以让我们轻松地迭代一个数组并为每个元素创建一个DOM节点。

    7 年前
  • 重新审视使用保留字作为属性名

    在 JavaScript 中,有一些单词被称为“保留字”,意味着它们被用于语言的内部功能和特性。这些保留字在编写 JavaScript 代码时是不能用作变量名或函数名的。

    7 年前
  • 获取触发事件的名称(类型)

    当我们使用 JavaScript 编写前端代码时,经常需要监听和处理各种事件。但有时候我们需要知道是哪种类型的事件触发了某个行为,以便进行进一步的处理。本文将介绍如何获取触发事件的名称(类型),并提供...

    7 年前
  • 通过 Javascript 闭包在循环中访问外部变量

    在 Javascript 中,闭包是一个非常强大且常见的概念。它可以帮助我们在函数内部访问到函数外部的变量,并且可以保持这些变量的状态。但是,在使用闭包时需要特别注意在循环中访问外部变量的问题。

    7 年前
  • 在指令链接函数中动态添加ng-click

    AngularJS 是一个流行的前端框架,它提供了一套强大的指令系统。在指令的链接函数中,我们可以使用 AngularJS 提供的 $compile 服务来编译和链接其他的指令或者 HTML 片段。

    7 年前
  • 使用 Babel 和 Grunt 正确编译项目的方法

    在现代的前端开发中,使用最新的 JavaScript 语法和功能是至关重要的。但是,由于各种浏览器对 JavaScript 的支持情况不同,我们需要使用工具来将我们的代码转换成可以在所有浏览器上运行的...

    7 年前
  • 如何在 Node.js MongoDB 原生驱动中将字符串转换为 ObjectId

    在使用 Node.js 和 MongoDB 开发应用程序时,由于数据存储的方式,经常需要将字符串转换为 MongoDB ObjectIds。本文将介绍如何在 Node.js MongoDB 原生驱动中...

    7 年前
  • 在ES6中,如何检查对象的类?

    在ES6之前,JavaScript中检查一个对象的类通常通过比较其原型链上的构造函数来完成。但是,在ES6中,我们可以使用instanceof和typeof操作符来更方便地执行此操作。

    7 年前
  • 使用 JavaScript 动态设置 select-options

    在前端开发中,经常需要动态设置下拉菜单(select)的选项(options),以使用户可以选择不同的选项。本文将介绍如何使用 JavaScript 创建和更新 select-options,包括从数...

    7 年前
  • 使用Require.js不使用data-main

    在前端开发中,使用模块化的编程方式可能会使代码更加清晰和易于维护。Require.js是一个流行的JavaScript模块加载器,它可以帮助我们管理模块依赖性并按需加载模块。

    7 年前
  • jQuery .click() 在 Safari 浏览器上没有反应的解决方法

    在前端开发中,我们经常使用 jQuery 来实现交互效果,其中 .click() 方法可以用来绑定点击事件。然而,有时候我们会遇到一个问题:这个方法在其他浏览器上能够正常工作,但在 Safari 浏览...

    7 年前

相关推荐

    暂无文章