JS 数组根据字段或者数组下标过滤数组的数据(fiter)

JS 数组根据字段或者数组下标过滤数组的数据(fiter)

使用数组的fiter很方便可以根据字段type进行筛选
```javascript
const newData = [
            {
                details: "尊敬的用户,欢迎您成为xxx平台会员。",
                id: 55,
                member_id: 19,
                source: "系统消息",
                status: 1,
                title: "注册成功",
                type: "重要通知",
            },
            {
                details: "尊敬的用户,请完善信息获得更多功能权限。",
                id: 55,
                member_id: 19,
                source: "系统消息",
                status: 1,
                title: "注册成功",
                type: "重要通知",
            },
            {
                details: "您的订单xxx已经发货!",
                id: 55,
                member_id: 19,
                source: "系统消息",
                status: 1,
                title: "注册成功",
                type: "订单消息",
            }
        ]
//过滤了 type=订单消息的数据
const noticeFiter= newData.filter(item => item.type === '重要通知')
//在上面过滤的基础上,过滤数组下标大于0的数据,相当于只取第一条
const noticeData=noticeFiter.filter((item,index)=> index<=0)
//过滤了 type=重要通知的数据
const orderData = newData.filter(item => item.type === '订单消息')


<think>好的,用户现在想对JavaScript数组按某个字段进行降序排序。我需要回顾之前的对话和相关引用,提供准确的方法。 首先,用户之前的问题是关于在React中使用useModal处理字符串换行,但现在转向了JavaScript数组排序。不过根据用户提供的引用,他们之前已经分享了几种排序方法,包括原生JavaScript和Lodash的实现。 现在用户明确要求按字段降序排列。我需要先确定用户是否了解原生方法,或者是否需要更简洁的封装函数。引用1中的arrObjSort函数已经是一个封装好的例子,可以处理升序和降序,但用户可能只需要降序部分。引用2展示了简单数组的降序,而引用4则是对象数组字段降序的例子。引用3提到了Lodash的orderBy方法,适合更复杂的排序需求。 用户可能需要多种方法的选择,比如原生实现、封装函数,或者使用Lodash库。需要分点说明,确保清晰。同时,用户可能关心是否会修改原数组,因为sort方法会改变原数组,这点需要提醒。另外,是否需要深拷贝来避免副作用也是一个注意点。 还要考虑用户是否对性能有要求,或者是否需要处理非数值字段的情况,比如字符串比较。不过根据引用中的例子,多数处理的是数值,可能需要指如果字段是字符串,应该用localeCompare。 最后,确保回答结构清晰,步骤明确,并给注意事项,比如引用中的安全验证和兼容性问题可能不适用,但修改原数组和深拷贝是相关的。需要总结不同方法的适用场景,帮助用户选择最合适的方案。</think>在 JavaScript 中实现数组字段降序排序主要有三种方法,以下是具体实现和对比分析: --- ### 方法一:原生 `sort()` 方法(推荐) 直接使用数组的 `sort()` 方法配合自定义比较函数: ```javascript const data = [ { name: "香蕉", num: 1 }, { name: "苹果", num: 4 }, { name: "葡萄", num: 3 }, { name: "草莓", num: 2 }, { name: "芒果", num: 5 } ]; // 按 num 字段降序排序(会修改原数组) data.sort((a, b) => b.num - a.num); console.log(data); // 输结果: // [{name:"芒果",num:5}, {name:"苹果",num:4}, {name:"葡萄",num:3}, ...] ``` --- ### 方法二:封装可复用函数(参考引用[1]) 创建通用排序函数,支持动态指定字段和排序方向: ```javascript /** * @desc 数组对象排序(会修改原数组) * @param {Array} arrObj - 目标数组 * @param {string} column - 排序字段 * @param {string} order - 排序方向 (asc/desc) */ function arrObjSort(arrObj, column, order = 'desc') { const sortOrder = order.toLowerCase() === 'asc' ? 1 : -1; arrObj.sort((a, b) => sortOrder * (Number(b[column]) - Number(a[column])) ); } // 使用示例 arrObjSort(data, 'num'); ``` --- ### 方法三:使用 Lodash(适合复杂场景,参考引用[3]) 通过 Lodash 的 `orderBy` 实现更灵活的排序: ```javascript import _ from 'lodash'; const sortedData = _.orderBy( data, // 原始数组 ['num'], // 排序字段 ['desc'] // 排序方向 ); ``` --- ### 对比分析 | 方法 | 优点 | 缺点 | 适用场景 | |------------|-------------------------------|----------------------------|-----------------------| | 原生方法 | 无需依赖库,性能最佳 | 会修改原数组 | 简单字段排序 | | 封装函数 | 可复用,支持动态配置 | 需要自行处理类型转换 | 需要重复调用的场景 | | Lodash | 支持多字段/多方向排序 | 需要引入第三方库 | 复杂排序需求 | --- ### 注意事项 1. **副作用问题**:`sort()` 方法会直接修改原数组,建议先拷贝: ```javascript const sorted = [...data].sort((a, b) => b.num - a.num); ``` 2. **非数值字段处理**:若字段值为字符串,需改用字符串比较: ```javascript data.sort((a, b) => b.name.localeCompare(a.name)); ``` 3. **空值处理**:建议增加空值判断逻辑(参考引用[1]的数值转换处理) --- ### 性能测试示例 ```javascript const bigData = Array(1e5).fill().map(() => ({ num: Math.floor(Math.random() * 1000) })); console.time('原生排序'); [...bigData].sort((a, b) => b.num - a.num); console.timeEnd('原生排序'); // 约 45ms (测试环境:Chrome 118) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值