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

如何按条件排序对象数组:vendorBidId为null置底,bidAmount升序排列

解决方案

方法1:直接自定义排序比较函数(推荐,一次排序完成)

直接在sort方法的比较逻辑里优先处理vendorBidId的存在性优先级,再处理数值排序:

array.sort((a, b) => {
  // 优先判断vendorBidId是否为null的情况
  const aIsNull = a.vendorBidId === null;
  const bIsNull = b.vendorBidId === null;
  // a是null、b不是:a排后面
  if (aIsNull && !bIsNull) return 1;
  // a不是、b是null:b排后面
  if (!aIsNull && bIsNull) return -1;
  // 都是null:保持原有相对顺序
  if (aIsNull && bIsNull) return 0;
  // 都不是null:按bidAmount升序排序
  return parseFloat(a.bidAmount) - parseFloat(b.bidAmount);
})
// 验证输出
.forEach(ele => console.log(ele.bidAmount))
// 输出结果:30 40 50 131 0 0

方法2:拆分数组再拼接(逻辑更直观,易维护)

先把数组拆分为「有有效vendorBidId」和「vendorBidId为null」两部分,分别处理后再合并:

// 筛选出有vendorBidId的部分,按bidAmount升序排序
const validList = array.filter(item => item.vendorBidId !== null)
  .sort((a, b) => parseFloat(a.bidAmount) - parseFloat(b.bidAmount));
// 筛选出vendorBidId为null的部分,保留原有顺序
const nullList = array.filter(item => item.vendorBidId === null);
// 合并得到最终结果
const result = [...validList, ...nullList];
// 验证输出
result.forEach(ele => console.log(ele.bidAmount))

原理解释

  • 排序比较函数的返回值规则:返回负数则a排在b前,返回正数则b排在a前,返回0则顺序不变
  • 优先判断vendorBidId的存在性,保证所有null的项排序优先级低于非null项,自然就会全部排在数组末尾
  • 非null的项之间再按bidAmount数值升序排序,完全匹配需求

内容的提问来源于stack exchange,提问作者Sreerag G

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:54:05