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

如何从对象数组中搜索字符串并按指定规则排序?

数组筛选与按关键词优先级排序解决方案

原始数据

const data = [
  {id:1, sItem:"This is javascript", status:"trending"},
  {id:2, sItem:"javascript is fun", status:"trending"},
  {id:3, sItem:"learning javascript", status:"trending"},
  {id:4, sItem:"how to code in javascript", status:"trending"},
  {id:5, sItem:"javascript will rule", status:"trending"},
  {id:6, sItem:"javascript can do anything", status:"trending"}
];

需求说明

筛选出sItem属性包含关键词javascript的元素,并按以下规则排序:

  • 以javascript开头的元素排在最前面
  • 其余包含该关键词的元素紧随其后,保持原始数组中的相对顺序

现有代码问题

你当前的filter逻辑会检查对象的所有属性(比如status)是否包含关键词,但需求只针对sItem属性,需要调整筛选条件;另外还缺少排序步骤。

解决方案

方法1:分组拼接(推荐,保证原顺序)

先筛选符合条件的元素,再分成"以关键词开头"和"仅包含关键词"两组,最后拼接数组,确保同组元素保持原始顺序:

const search = "javascript";

// 筛选sItem包含关键词的元素
const filteredItems = data.filter(obj => obj.sItem.includes(search));

// 拆分两组
const startsWithKeyword = filteredItems.filter(obj => obj.sItem.startsWith(search));
const containsKeyword = filteredItems.filter(obj => !obj.sItem.startsWith(search));

// 合并得到结果
const result = startsWithKeyword.concat(containsKeyword);

方法2:使用sort排序

通过sort方法调整顺序,注意:部分JavaScript引擎的sort是不稳定排序,可能会打乱同组元素的原始顺序:

const search = "javascript";

const result = data
  .filter(obj => obj.sItem.includes(search))
  .sort((a, b) => {
    const aStarts = a.sItem.startsWith(search);
    const bStarts = b.sItem.startsWith(search);
    // 开头元素优先级更高
    if (aStarts && !bStarts) return -1;
    if (!aStarts && bStarts) return 1;
    // 同组尝试保持原顺序(不稳定排序可能失效)
    return 0;
  });

验证结果

两种方法最终都会得到预期输出:

const result = [
  {id:2, sItem:"javascript is fun", status:"trending"},
  {id:5, sItem:"javascript will rule", status:"trending"},
  {id:6, sItem:"javascript can do anything", status:"trending"},
  {id:1, sItem:"This is javascript", status:"trending"},
  {id:3, sItem:"learning javascript", status:"trending"}, 
  {id:4, sItem:"how to code in javascript", status:"trending"}
];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:51:16