Я пытаюсь понять задачу Seek and Destroy ниже.
Задача: вам будет предоставлен исходный массив (первый аргумент в функции эсминца), за которым следуют один или несколько аргументов. Удалите все элементы из исходного массива, которые имеют такое же значение, что и эти аргументы.
This is the initial code below:
function destroyer(arr) {
// Remove all the values
return arr;
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
После нескольких (действительно) нескольких попыток и поиска кода других людей я смог решить эту задачу. Однако, я думаю, это было больше не повезло. Ive скопировал мой код ниже, но я надеялся, что кто-то может прояснить пару вещей для меня.
В приведенном ниже коде передается ли я возвращаю val или args в функцию iterateThroughArray. Это почему?
Если я должен сравнивать ВСЕ аргументы против первого аргумента, где в этом коде я указываю это? Я продолжал думать, что мне нужно объединить первый аргумент, чтобы сравнить все другие аргументы против него или создать переменную для аргумента [0]. Любое руководство, которое вы можете предоставить, очень ценится!
function destroyer(arr) {
var args = Array.from(arguments); //this also converts them to an array
var iterateThroughArr = function (val) {
if (args.indexOf(val) ===-1){
return args;
}
};
return arr.filter(iterateThroughArr);
}
Это может звучать много, но вот мое объяснение
function destroyer(arr) {
var args = Array.from(arguments); //Here arr is converted to [Array(6),2,3]
//console.log(args)
/* var iterateThroughArr = function (val) {
if (args.indexOf(val) ===-1){
return args;
}
};
return arr.filter(iterateThroughArr);
*/
// to make more clear the above code can be rewritten as below
var arr = arr.filter(function (val) {
console.log("args = "+ args + " val = " + val + " indexOf(val) " + args.indexOf(val) )
// here you are itterating through each arr val which in this case is[1,2,3,1,2,3]
// if you dont believe me uncomment the next console.log() and see the output
// console.log(val)
if (args.indexOf(val) ===-1){
// here is where the magic happens
// Now you are checking if val exisists by using a builtin method called .indexOf()
// In general, .indexOf() returns -1 if a value does not exist within an array
//Below is working example
/* var array = [1,2,3,4,5]
console.log(array.indexOf(1)) // 0 since it is located at index 0
console.log(array.indexOf(5)) // 4 since it is located at index 4
console.log(array.indexOf(10)) // -1 since it does not exisit
*/
// Therefore, if value passes the above if statement
//then that means it doesnot exisit on args([Array(6),2,3])
//which as a result will be included on the filtered array
return args;
}
});
return arr;
}
var val = destroyer([1, 2, 3, 1, 2, 3], 2, 3);
//console.log(val)
В принципе, вам нужно понять, как работает фильтр и как работает.indexOf. Подробнее см. В документации Mozilla: .indexOf() и .filter()