You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 12:45:03