mirror of
https://github.com/freeCodeCamp/freeCodeCamp.git
synced 2026-02-25 23:01:26 -05:00
2.3 KiB
2.3 KiB
id, title, challengeType, forumTopicId, dashedName
| id | title | challengeType | forumTopicId | dashedName |
|---|---|---|---|---|
| 9d7123c8c441eeafaeb5bdef | 使用 slice 而不是 splice 从数组中移除元素 | 1 | 301236 | remove-elements-from-an-array-using-slice-instead-of-splice |
--description--
使用数组时经常遇到要删除一些元素并保留数组剩余部分的情况。 为此,JavaScript 提供了 splice 方法,它接收两个参数:从哪里开始删除项目的索引,和要删除的项目数。 如果没有提供第二个参数,默认情况下是移除一直到结尾的所有元素。 但 splice 方法会改变调用它的原始数组。 举个例子:
const cities = ["Chicago", "Delhi", "Islamabad", "London", "Berlin"];
cities.splice(3, 1);
在这里 splice 返回字符串 London 并从城市数组中删除它。 cities 将有值 ["Chicago", "Delhi", "Islamabad", "Berlin"]。
正如我们在上一次挑战中看到的那样,slice 方法不会改变原始数组,而是返回一个可以保存到变量中的新数组。 回想一下,slice 方法接收两个参数,从开始索引开始选取到结束(不包括该元素),并在新数组中返回这些元素。 使用 slice 方法替代 splice 有助于避免数组变化产生的副作用。
--instructions--
用 slice 代替 splice 重写 nonMutatingSplice 函数。 将 cities 数组长度限制为 3,并返回一个仅包含前 3 项的新数组。
不要改变提供给函数的原始数组。
--hints--
你的代码中应使用 slice 方法。
assert(code.match(/\.slice/g));
不能使用 splice 方法。
assert(!code.match(/\.?[\s\S]*?splice/g));
You should not mutate the original array passed to the function.
assert.deepEqual(_inputCities, ["Chicago", "Delhi", "Islamabad", "London", "Berlin"]);
nonMutatingSplice(["Chicago", "Delhi", "Islamabad", "London", "Berlin"]) 应返回 ["Chicago", "Delhi", "Islamabad"]。
assert.deepEqual(nonMutatingSplice(_inputCities), ["Chicago", "Delhi", "Islamabad"]);
--seed--
--seed-contents--
function nonMutatingSplice(cities) {
return cities.splice(3);
}
--after-user-code--
const _inputCities = ["Chicago", "Delhi", "Islamabad", "London", "Berlin"];
--solutions--
function nonMutatingSplice(cities) {
return cities.slice(0,3);
}