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

JavaScript数组映射时如何按条件将指定元素排在首位

实现方案

核心思路

  • 将content数组按匹配规则拆分为两组:value等于firstValue的元素为第一组,其余元素为第二组
  • 拼接两组数组后替换原content字段即可,为避免修改原对象,建议返回新的对象实例

方案1:数组拆分拼接(推荐)

兼容性最好,完全保留非匹配元素的原有顺序,不会修改原对象/原数组,无副作用

function adjustContentOrder(obj) {
  const targetValue = obj.firstValue;
  // 拆分匹配项和非匹配项
  const matchedItems = obj.content.filter(item => item.value === targetValue);
  const restItems = obj.content.filter(item => item.value !== targetValue);
  // 返回新对象,避免修改原始数据
  return {
    ...obj,
    content: [...matchedItems, ...restItems]
  };
}

// 调用示例
const originalData = {
  firstValue:"xyz",
  content:[
    {"value": "abc","checked": true},
    {"value": "xyz","checked": false},
    {"value": "lmn","checked": true}
  ]
};
const processedData = adjustContentOrder(originalData);
console.log(processedData);

注:你给出的预期输出中xyz项的checked属性从false变为true属于手误,本方案仅调整元素顺序,不会修改元素本身的属性值

方案2:sort排序实现

代码更简洁,现代浏览器环境下sort为稳定排序,也能保证非匹配项的原有顺序

const originalData = {
  firstValue:"xyz",
  content:[
    {"value": "abc","checked": true},
    {"value": "xyz","checked": false},
    {"value": "lmn","checked": true}
  ]
};
const processedData = {
  ...originalData,
  content: originalData.content.sort((a, b) => {
    if (a.value === originalData.firstValue) return -1;
    if (b.value === originalData.firstValue) return 1;
    return 0;
  })
};

两种方案对比

  • 拆分拼接法:无副作用,不会修改原数组,所有JS运行环境下都能稳定保留非匹配项的原有顺序
  • sort方法:代码量更少,适合现代浏览器、Node.js等主流运行环境使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:39:00