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

JavaScript基于索引删除数组元素:splice使用异常需求实现求助

问题原因
  • splice 方法会修改原数组,返回值为被删除元素组成的数组,你直接将其放在链式调用环节,后续map遍历的是被删除的元素,而非处理后剩下的元素,导致结果错误。
  • 你要移除的是反转后路径数组下标为1的元素(对应parentSlug),之前的删除位置参数设置错误。
实现方案

你可以根据需求选择以下任意一种实现:

方案1:用filter过滤(推荐,纯函数无副作用,可读性最高)

直接过滤掉反转后下标为1的元素即可:

path.split('/')
    .filter(i => i)
    .reverse()
    .filter((_, index) => index !== 1)
    .map((slug, i) => {
      return `${'parent->'.repeat(i)}slug.current == '${slug}'`;
    });

方案2:用splice修改(会修改原数组,不能直接链式调用)

splice适合需要修改原数组的场景,要注意先将反转后的数组存为变量再操作:

const reversedSlugs = path.split('/')
    .filter(i => i)
    .reverse();
// 从下标1开始,删除1个元素
reversedSlugs.splice(1, 1);
const result = reversedSlugs.map((slug, i) => {
  return `${'parent->'.repeat(i)}slug.current == '${slug}'`;
});

方案3:用slice拼接(纯函数无副作用)

slice不会修改原数组,通过截取前后两段拼接跳过要删除的元素:

const reversedSlugs = path.split('/')
    .filter(i => i)
    .reverse();
const result = reversedSlugs.slice(0,1)
    .concat(reversedSlugs.slice(2))
    .map((slug, i) => {
      return `${'parent->'.repeat(i)}slug.current == '${slug}'`;
    });

以上实现最终得到的数组都是你预期的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:54:04