当只有 return 1 个值时如何使这个 removeMiddle 测试通过
How to make this removeMiddle test pass when just return 1 value
我正在尝试创建一个函数来使这个测试通过
下面是我的测试用例代码:
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);
首先,您希望您的输出是删除的单词。但是您正在 returning 来自 removeWords
的 words
数组。你可能可以 return index
.
另外,一旦你拼接了你的words
数组,queen将不再是数组的一部分。所以你的 for 循环什么都不做,索引 returns 是一个空数组。
您可以像这样修改代码以获得预期的输出:
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;
}
我正在尝试创建一个函数来使这个测试通过
下面是我的测试用例代码:
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);
首先,您希望您的输出是删除的单词。但是您正在 returning 来自 removeWords
的 words
数组。你可能可以 return index
.
另外,一旦你拼接了你的words
数组,queen将不再是数组的一部分。所以你的 for 循环什么都不做,索引 returns 是一个空数组。
您可以像这样修改代码以获得预期的输出:
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;
}