构建接收字符串与数组的修改数组合并方法遇问题,求解决方案
没问题,我来帮你梳理下解决思路,一步步搞定这个方法~
解决思路拆解
先把咱们的需求再明确下,避免理解偏差:
- 输入:一个数组(比如叫
inputArr)、一个字符串(比如叫inputStr) - 输出:一个长度为3的新数组
- 第0位必须是传入的
inputStr - 新数组里绝对不能出现原数组的最后一个元素
- 剩下的两个元素从原数组(排除最后一个元素的部分)里选取
- 第0位必须是传入的
1. 先处理原数组:去掉最后一个元素
首先要把原数组的最后一个元素排除掉,这里推荐用数组的slice方法——它不会修改原数组,非常安全:
// 比如原数组是 [1,2,3,4],去掉最后一个后得到 [1,2,3] const filteredArr = inputArr.slice(0, -1);
如果原数组本身长度小于2(比如只有1个元素),那filteredArr会变成空数组,这时候得考虑边界情况:毕竟要凑够3个元素,可能需要补充默认值(比如null、空字符串,具体看你的预期输出要求)。
2. 构建目标返回数组
新数组的第0位是传入的字符串,然后从filteredArr里取元素,凑够3个长度:
- 如果
filteredArr里有至少2个元素,取前两个,加上字符串就刚好3个 - 如果
filteredArr里只有1个元素,补一个默认值 - 如果
filteredArr是空的,补两个默认值
举个贴合需求的测试例子:
输入:数组
["a", "b", "c"],字符串"hello"
预期输出:["hello", "a", "b"]
3. 完整代码示例(以JavaScript为例)
function mergeArrayAndString(inputArr, inputStr) { // 第一步:过滤掉原数组最后一个元素 const filteredArr = inputArr.slice(0, -1); // 第二步:初始化结果数组,第一位放传入的字符串 const result = [inputStr]; // 从过滤后的数组里取元素,直到结果数组长度到3 for (let i = 0; result.length < 3 && i < filteredArr.length; i++) { result.push(filteredArr[i]); } // 长度不够的话补默认值,这里用null,你可以改成自己需要的内容 while (result.length < 3) { result.push(null); } return result; } // 测试用例验证 console.log(mergeArrayAndString(["a", "b", "c"], "hello")); // ["hello", "a", "b"] console.log(mergeArrayAndString([1], "test")); // ["test", null, null] console.log(mergeArrayAndString([5,6,7,8], "foo")); // ["foo",5,6]
4. 排查你现有代码的常见坑
如果你的代码跑不起来,大概率踩了这些雷:
- 不小心修改了原数组:比如用了
pop(),它会直接删掉原数组的最后一个元素,导致后续逻辑混乱,优先用slice这种不修改原数组的方法 - 边界情况没处理:比如原数组长度不够,导致返回的数组长度不是3
- 错误包含了原数组最后一个元素:比如取元素时范围写错了,用了
slice(0, inputArr.length)而不是slice(0, -1) - 参数顺序搞反了:比如方法定义时先接收数组还是字符串,调用时传反了,导致第0位元素不对
你可以对照上面的点检查下你的代码,如果还是有问题,把你的代码贴出来,咱们再具体分析~
内容的提问来源于stack exchange,提问作者Doctor Rue
相关产品推荐
相关产品推荐

