如何用JavaScript或lodash按条件对JSON对象数组升降序排序并提取字段
实现方案
原生JavaScript实现
function getSortedNumbers(data, targetId, sortOrder = 'asc') { // 筛选指定id的所有对象 const filtered = data.filter(item => item.id === targetId); // 按name字段升降序排序 filtered.sort((a, b) => { const compareRes = a.name.localeCompare(b.name); return sortOrder === 'asc' ? compareRes : -compareRes; }); // 提取number字段组成结果数组 return filtered.map(item => item.number); } // 测试用例 const data = [ { id: 1, age: 36, name: 'ram', number: 11}, { id: 2, age: 40, name: 'sam', number: 11 }, { id: 3, age: 37, name: 'roy', number: 11 }, { id: 1, age: 41, name: 'fil', number: 12 }, { id: 2, age: 43, name: 'joy', number: 12 }, { id: 3, age: 46, name: 'john', number: 12 } ]; // 筛选id=1 按name升序 console.log(getSortedNumbers(data, 1, 'asc')); // 输出 [12, 11] // 筛选id=2 按name降序 console.log(getSortedNumbers(data, 2, 'desc')); // 输出 [11, 12]
Lodash实现
如果项目已引入lodash,可通过链式调用简化代码:
const _ = require('lodash'); // 已全局引入lodash可跳过该行 function getSortedNumbers(data, targetId, sortOrder = 'asc') { return _.chain(data) .filter({ id: targetId }) // 筛选指定id的对象 .orderBy('name', sortOrder) // 按name字段排序 .map('number') // 提取number字段 .value(); } // 测试效果与原生实现完全一致
内容的提问来源于stack exchange,提问作者Aggressive
相关产品推荐
相关产品推荐

