# Intermediate Algorithm: Seek and Destroy

Hey guys!

Working on Seek and Destroy… Thought I was going down the right track… but having issues. Where am I going wrong here…

``````  function destroyer(arr) {
// Gives me the first argument
let array1 = arguments[0];
let newArr = [];

for (var i = 0; i < arguments.length; i++) {
if (array1.includes(arguments[i])) {
newArr = array1.filter(x => x !== arguments[i]);
}
}
console.log(newArr)
}

destroyer(["tree", "hamburger", 53], "tree", 53);
``````

This returns “tree”, “hamburger”… am I not looping correctly…

You’re making things complicated here.

First, understand the challenge/problem correctly and think about how you’d approach this? Write pseudocode.

Let’s understand the problem first:

``````destroyer(["tree", "hamburger", 53], "tree", 53);
// Should return => ["hamburger"]
``````

The very first argument is the array we will be filtering/deleting items from, and the items we need to delete can vary from `arguments[1]` to `arguments[n]`, there’s no limit.

So let’s start with what we understand,

``````// We can use ES6 features to take advantage here.
// (See below for ES5 version)

function destroyer(arr, ...itemsToDelete) {
// `arr` argument will be: ["tree", "hamburger", 53]
// `itemsToDelete` will be: ["tree", 53]   <-- Notice that we have them in array

// Now we need to filter the `arr` and check if the values exists in `itemsToDelete`?
// If it exists, then we DON'T need it, means we need to return false there.
//  try to implement this from here. It's just a one-liner
return arr.filter..... // complete this.
};
``````

ES5 version

``````function destroyer(arr) {
// We have the first argument already named `arr`, so nothing to do here.
// To gather the rest of the arguments we need to copy the whole `arguments` list
// But WITHOUT the first element. Why? because the first element is our `arr`
//  and we already have it. We just need to gather the rest of the arguments
// into an array so we can work easily.

var itemsToDelete = arguments.slice(1);  // ["tree", 53]

// `slice` returns a new array starting from the index you provide.
// we provide 1 here because 0 index is our `arr` argument and we don't want that.

// The rest is the same:
return arr.filter.... // complete it
};
``````

Read more about the `slice` here at MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice

2 Likes