如何在JavaScript函数中使用return返回处理后的完整数组?
问题:如何让数组删除指定元素后返回完整处理后的数组?
我写了如下代码:
const removeFromArray = function (xArray, xNumber) { for(let i = 0; i < xArray.length; i++) { if(xArray[i] === xNumber) { const index = xArray.indexOf(xNumber); const x = xArray.splice(index, 0); } else { console.log(xArray[i]); } } }; removeFromArray([1, 11, 3, 4], 11);
这个函数接收两个参数:目标数组和要删除的元素。之前用console.log验证功能,现在想移除console.log,改用return返回处理后的完整数组。但尝试用return xArray[i];时,只能返回数组的第一个元素,请问该怎么实现返回处理后的完整数组?比如调用removeFromArray([1, 2, 3, 4], 3);应该删除3并返回[1,2,4]。
先修正你代码里的几个问题:
splice用法错误:你写的splice(index, 0)是在指定位置插入元素,不是删除。删除元素需要把第二个参数设为1(表示删除1个元素),即xArray.splice(index, 1)。- 循环逻辑冗余:既然已经通过
xArray[i] === xNumber找到了目标元素,没必要再用indexOf重新找索引,直接用i作为索引就行。 - return位置错误:你之前在循环里
return xArray[i]会直接终止函数,只返回当前遍历到的元素,应该在整个处理逻辑结束后,返回整个数组。
修正后的代码:
const removeFromArray = function (xArray, xNumber) { // 遍历数组,找到目标元素就删除 for(let i = 0; i < xArray.length; i++) { if(xArray[i] === xNumber) { xArray.splice(i, 1); // 删除元素后,数组长度减1,i要回退一位避免跳过下一个元素 i--; } } // 循环结束后返回处理完的数组 return xArray; }; // 测试 console.log(removeFromArray([1, 2, 3, 4], 3)); // 输出 [1,2,4] console.log(removeFromArray([1, 11, 3, 11, 4], 11)); // 输出 [1,3,4]
额外说明:
- 上面的代码会删除数组中所有和
xNumber相等的元素,如果只需要删除第一个匹配的元素,找到后直接break循环再return就行。 - 如果你不想修改原数组(因为
splice会直接修改原数组),可以先复制一份数组再处理:
const removeFromArray = function (xArray, xNumber) { const newArray = [...xArray]; // 复制原数组 for(let i = 0; i < newArray.length; i++) { if(newArray[i] === xNumber) { newArray.splice(i, 1); i--; } } return newArray; };
内容的提问来源于stack exchange,提问作者Luigi
相关产品推荐
相关产品推荐

