如何仅对数组中的positive numbers进行旋转操作?
仅旋转数组中的正数元素(保持负数位置不变)
要实现仅旋转正数、保留负数位置的需求,核心思路是先分离出正数单独处理旋转,再将旋转后的正数填充回原数组的对应位置。以下是具体解决方案:
const ar = [1,2, -8, 3,4,5,-3,-44]; const rotateTimes = 3; // 1. 提取原数组中的所有正数 const positives = ar.filter(num => num > 0); // 2. 对正数数组执行指定次数的右旋转(和原代码逻辑一致) for(let i = 0; i < rotateTimes; i++){ positives.unshift(positives.pop()); } // 3. 将旋转后的正数填充回原数组,负数位置保持不变 let posIndex = 0; const result = ar.map(num => { if(num > 0){ return positives[posIndex++]; } return num; }); console.log(result); // 输出: [3,4,-8,5,1,2,-3,-44]
代码说明
- 提取正数:通过
filter方法筛选出原数组中的所有正数,得到子数组[1,2,3,4,5]。 - 旋转正数数组:沿用你原有的旋转逻辑(每次弹出最后一个元素并插入到开头),执行3次后正数数组变为
[3,4,5,1,2]。 - 填充回原数组:使用
map遍历原数组,遇到正数时从旋转后的正数数组中按顺序取元素替换,负数直接保留原数值,最终得到符合预期的结果。
内容的提问来源于stack exchange,提问作者3gwebtrain
相关产品推荐
相关产品推荐

