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

如何筛选数组中带尾缀x的元素并修改后续匹配项?

问题描述

给定输入数组:

const inputArr = [
  ["1.3","6"],
  ["1.4", "7"],
  ["1.4", "7"],
  ["1.4x", "s"],
  ["1.4x", "g"],
  ["1.4x", "9"], //此处为带尾缀'x'的元素,需在后续子数组中查找"1.4"
  ["2","8"],     
  ["2.1x","9"],
  ["2.2.2","12"],
  ["1.4", "13"], //找到"1.4",需改为"1.4x"
  ["1.4", "14"], //找到"1.4",需改为"1.4x"
  ["2.1","92"],
  ["3","15"],
  ["4","16"]
]

需要按照以下条件创建新数组:

  • 筛选出子数组第一个元素中带尾缀x的唯一字符串(例如"1.4x")。
  • 针对每个筛选出的元素,在后续的子数组(而非前面的子数组)中查找与该元素去掉尾缀x后匹配的字符串(例如,针对"1.4x"查找后续的"1.4")。
  • 若找到匹配项,为其添加尾缀x。

预期得到的新数组如下:

newArr = [
      ["1.3","6"],
      ["1.4", "7"],
      ["1.4", "7"],
      ["1.4x", "s"],
      ["1.4x", "g"],
      ["1.4x", "9"],
      ["2","8"],
      ["2.1x","9"],
      ["2.2.2","12"],
      ["1.4x", "13"], //将"1.4"改为"1.4x"
      ["1.4x", "14"], //将"1.4"改为"1.4x"
      ["2.1x","92"],  //将"2.1"改为"2.1x"
      ["3","15"],
      ["4","16"]
    ]

目前已经通过以下代码筛选出带尾缀x的唯一元素,但不清楚后续步骤如何实现:

const filteredItems = inputArr.filter(([key, value]) => key.endsWith("x"));
const uniqueFilteredItems =[...new Set(filteredItems.map(([k]) => k))]
console.log(uniqueFilteredItems);
解决方案

核心思路是:遍历数组时,实时记录已经出现过的带x后缀的键(去掉x后的版本),后续遇到匹配的无x键时自动添加x后缀,天然满足"只修改后续元素"的要求。

完整实现代码:

const inputArr = [
  ["1.3","6"],
  ["1.4", "7"],
  ["1.4", "7"],
  ["1.4x", "s"],
  ["1.4x", "g"],
  ["1.4x", "9"],
  ["2","8"],     
  ["2.1x","9"],
  ["2.2.2","12"],
  ["1.4", "13"],
  ["1.4", "14"],
  ["2.1","92"],
  ["3","15"],
  ["4","16"]
];

// 存储需要匹配的前缀(带x后缀的键去掉x后的值)
const requiredKeys = new Set();
const newArr = [];

for (const [key, value] of inputArr) {
  if (key.endsWith('x')) {
    // 提取前缀存入集合,原键值对直接加入新数组
    const prefix = key.slice(0, -1);
    requiredKeys.add(prefix);
    newArr.push([key, value]);
  } else {
    // 检查当前键是否需要补x后缀
    if (requiredKeys.has(key)) {
      newArr.push([`${key}x`, value]);
    } else {
      newArr.push([key, value]);
    }
  }
}

console.log(newArr);

代码说明

  1. requiredKeys集合:用来快速判断后续的无x键是否需要补后缀,集合的查询效率比数组更高。
  2. 遍历逻辑:
    • 遇到带x的键:先把去掉x的前缀存入集合,再将原键值对加入新数组。
    • 遇到无x的键:如果该键在集合中存在,就补x后缀后加入,否则直接加入原键值对。
  3. 顺序保障:因为是按原数组顺序遍历,只有先出现带x的键,后续的匹配项才会被修改,完全符合"只修改后续元素"的要求。

内容的提问来源于stack exchange,提问作者Imran Al Rashid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:01:01