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

JavaScript数组移指定元素至头部异常:结果数组长度仅为1

问题分析与解决方案

你的代码核心问题是误解了Array.splice()的返回值:

  • splice(index, 1)不会返回修改后的原数组,它返回的是被删除的元素组成的数组,所以你赋值的sortedAdv一开始就只有1个元素(就是你找到并删除的那个type)。
  • 后续调用sortedAdv.unshift(type)只是给这个单元素数组再添加一个相同元素,最终得到的是[type, type],完全不是你想要的“将原数组指定元素移到开头”的结果。

方法一:修改原数组(直接操作原数组)

这种方式会改变原advantages数组,适合允许修改原数组的场景:

let advantages = [ 'liked', 'sendUnlimitedLikes', 'unlockSundays', 'getBoosted', 'filters', 'revealAllProfiles', 'wholeCountry', 'exlusiveBlogs' ];
 
console.log('advantages', advantages.length);

let index = advantages.findIndex((advantage) => advantage == type);
if (index > -1) {
  console.log('index', index);
  // 取出被删除的元素
  const removedItem = advantages.splice(index, 1)[0];
  // 将元素添加到原数组的开头
  advantages.unshift(removedItem);
  console.log('modified advantages length', advantages.length);
  this.setPurchaseAdvantages(advantages);
}

方法二:创建新数组(不修改原数组)

如果不想改变原数组,可以通过解构和过滤生成新数组:

let advantages = [ 'liked', 'sendUnlimitedLikes', 'unlockSundays', 'getBoosted', 'filters', 'revealAllProfiles', 'wholeCountry', 'exlusiveBlogs' ];
 
console.log('advantages', advantages.length);

let index = advantages.findIndex((advantage) => advantage == type);
if (index > -1) {
  console.log('index', index);
  // 生成新数组:目标元素放开头,其余元素排除目标元素后跟上
  const sortedAdv = [
    type,
    ...advantages.filter(item => item !== type)
  ];
  console.log('sortedAdv length', sortedAdv.length);
  this.setPurchaseAdvantages(sortedAdv);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 15:48:30