javascript - 仅返回 1 个值时如何使此 removeMiddle 测试通过
问题描述
我正在尝试创建一个函数以使此测试通过
这是我的测试用例的以下代码:
var removeMiddle = require("./remove-middle");
test("Remove middle", function () {
var words = ["mouse", "giraffe", "queen", "window", "bottle"];
var expectedWords = ["mouse", "giraffe", "window", "bottle"];
var expectedOutput = ["queen"];
var output = removeMiddle(words);
expect(output).toEqual(expectedOutput);
expect(words).toEqual(expectedWords);
});
这是我创建的函数:
function removeMiddle(words) {
let index = [];
words.splice(2, 1);
for (let i = 0; i < words.length; i++) {
if (words[i] === "queen") {
index.push(words[i]);
}
}
return words;
}
module.exports = removeMiddle;
现在我的函数刚刚通过了第二个测试用例:expect(words).toEqual(expectedWords);
解决方案
首先,您希望您的输出是删除的单词。但是您words
要从removeWords
. 您可能可以返回index
。
此外,一旦你拼接了你的words
数组,queen将不再是数组的一部分。所以你的 for 循环什么都不做, index 返回一个空数组。
您可以像这样修改代码以获得预期的输出:
function removeMiddle(words) {
let index = [words[2]];
words.splice(2, 1);
return index;
}
但是现在您的代码有点硬编码,仅适用于固定长度的数组(5)。如果您想要更通用的解决方案,可以执行以下操作。
function removeMiddle(words) {
if(words.length == 0) return [];
let index = [];
let middleElements = [];
if(words.length % 2 == 0){
console.log(words[Math.floor(words.length/2)]);
middleElements.push(words[Math.floor(words.length/2)]);
words.splice(words.length/2,1);
console.log(words[Math.floor(words.length/2)]);
middleElements.push(words[Math.floor(words.length/2)]);
words.splice(words.length/2,1);
}
else{
console.log(words.length/2);
middleElements.push(words[Math.floor(words.length/2)]);
words.splice(words.length/2,1);
}
return middleElements;
}
推荐阅读
- arrays - 在 C 中初始化字符串数组
- reactjs - Typescript 在 VScode 中工作,但 eslint 为推断类型发出 react/prop-types 错误
- android - 自定义对话框中textview的高度为0
- arduino - 在具有多个按钮的 arduino 中一次使用一个按钮
- python - 如何在 POST 请求(表单数据)中上传文件?
- javascript - 使用正则表达式值验证密码时出错?
- javascript - 单击时触发工具提示
- google-bigquery - BigQuery 在位置找不到现有表
- jenkins - 创建空文件时未将 Ebextensions 部署到 AWS Beanstalk
- c++ - 对 C++ 中的复制构造函数和对象感到困惑