--- id: a39963a4c10bc8b4d4f06d7e challengeType: 5 forumTopicId: 16046 title: 瞄准和消灭 --- ## Description
在这道题目中,我们要写一个叫destroyer的函数。传给它的第一个参数是数组,我们称他为初始数组。后续的参数数量是不确定的,可能有一个或多个。你需要做的是,从初始数组中移除所有与后续参数相等的元素,并返回移除元素后的数组。 注意:
你可以使用arguments对象,也可以使用...,即“剩余参数”(Rest Parameters)语法。 如果你遇到了问题,请点击帮助
## Instructions
## Tests
```yml tests: - text: destroyer([1, 2, 3, 1, 2, 3], 2, 3)应该返回[1, 1]。 testString: assert.deepEqual(destroyer([1, 2, 3, 1, 2, 3], 2, 3), [1, 1]); - text: destroyer([1, 2, 3, 5, 1, 2, 3], 2, 3)应该返回[1, 5, 1]。 testString: assert.deepEqual(destroyer([1, 2, 3, 5, 1, 2, 3], 2, 3), [1, 5, 1]); - text: destroyer([3, 5, 1, 2, 2], 2, 3, 5)应该返回[1]。 testString: assert.deepEqual(destroyer([3, 5, 1, 2, 2], 2, 3, 5), [1]); - text: destroyer([2, 3, 2, 3], 2, 3)应该返回[]。 testString: assert.deepEqual(destroyer([2, 3, 2, 3], 2, 3), []); - text: "destroyer(['tree', 'hamburger', 53], 'tree', 53)应该返回['hamburger']。" testString: assert.deepEqual(destroyer(["tree", "hamburger", 53], "tree", 53), ["hamburger"]); - text: "destroyer(['possum', 'trollo', 12, 'safari', 'hotdog', 92, 65, 'grandma', 'bugati', 'trojan', 'yacht'], 'yacht', 'possum', 'trollo', 'safari', 'hotdog', 'grandma', 'bugati', 'trojan')应该返回[12,92,65]。" testString: assert.deepEqual(destroyer(["possum", "trollo", 12, "safari", "hotdog", 92, 65, "grandma", "bugati", "trojan", "yacht"], "yacht", "possum", "trollo", "safari", "hotdog", "grandma", "bugati", "trojan"), [12,92,65]); ```
## Challenge Seed
```js function destroyer(arr) { // Remove all the values return arr; } destroyer([1, 2, 3, 1, 2, 3], 2, 3); ```
## Solution
```js function destroyer(arr) { var hash = Object.create(null); [].slice.call(arguments, 1).forEach(function(e) { hash[e] = true; }); // Remove all the values return arr.filter(function(e) { return !(e in hash);}); } destroyer([1, 2, 3, 1, 2, 3], 2, 3); ```