如何基于内部数组中带指定前缀的标签按字母顺序排序并过滤数组
解决方法:过滤+按指定标签排序
没问题,我来帮你搞定这个需求!咱们要完成两个核心操作:过滤掉不含old前缀标签的元素,然后按old标签的字母顺序对剩余元素排序。下面是具体实现步骤和完整代码:
步骤拆解
1. 过滤元素
首先用Array.filter()方法筛选出符合条件的元素——也就是personTags数组里至少有一个标签以old (注意后面有空格,避免误匹配类似oldschool这类标签)开头的对象。
2. 按old标签排序
接着用Array.sort()方法排序,我们需要先提取每个元素对应的old标签,再用字符串的自然排序方法localeCompare()来对比顺序。对于有多个old标签的元素(比如示例里的Cris),我们取第一个出现的old标签作为排序依据,这和你给出的示例结果一致。
完整代码实现
const array = [ { personName: "Vans", personTags: ["young", "old A"] }, { personName: "Lia", personTags: ["young", "ok"] }, { personName: "Rein", personTags: ["old B", "hairless", "ok"] }, { personName: "Cris", personTags: ["old A", "old B", "acrounimouslyness"] }, { personName: "Mercy", personTags: ["young", "hairless", "ok"] }, { personName: "Cbum", personTags: ["old C", "hairless", "young"] }, ]; const result = array // 过滤:只保留包含old前缀标签的元素 .filter(item => item.personTags.some(tag => tag.startsWith('old '))) // 排序:按第一个old标签的字母顺序排列 .sort((a, b) => { // 提取元素的第一个old标签 const getFirstOldTag = (obj) => obj.personTags.find(tag => tag.startsWith('old ')); return getFirstOldTag(a).localeCompare(getFirstOldTag(b)); }); console.log(result);
运行结果
执行后得到的结果就是你想要的目标数组:
[ { personName: "Vans", personTags: ["young", "old A"] }, { personName: "Cris", personTags: ["old A", "old B", "acrounimouslyness"] }, { personName: "Rein", personTags: ["old B", "hairless", "ok"] }, { personName: "Cbum", personTags: ["old C", "hairless", "young"] }, ]
内容的提问来源于stack exchange,提问作者Johnsons e Johnsons
相关产品推荐
相关产品推荐

