2016-04-27 46 views
0

我一直在这个课程上做了几个小时的免费代码阵营,但是,我发现了一个我不明白的解决方案,并且我试图在每条记录上添加注释,以便在未来的参考文献中实现并理解它,而且我已经了解一些行,但我不明白这个代码的某些部分:在滤波器阵列上切换一个参数?

function destroyer(arr) { 
    // let's make the arguments part of the array 
    var args = Array.prototype.slice.call(arguments); // this would result into [[1, 2, 3, 1, 2, 3], 2, 3] 
    args.splice(0,1); // now we remove the first argument index on the array so we have 2,3 in this example 

// I DO NOT UNDERSTAND THESE CODES BELOW 
    return arr.filter(function(element) { 
    return args.indexOf(element) === -1; 
}); 

} 

destroyer([1, 2, 3, 1, 2, 3], 2, 3); 

我已经检查的文件,我觉得很难理解,似乎在此示例中的代码有很大的不同。我将衷心感谢您的帮助!

+0

要明确,代码的作品,你想知道为什么? – amflare

+0

@amflare是的,我已经更新了这个问题。这是我的问题。 –

+0

那你不明白吗? – Hamms

回答

1
  1. 中的代码,你不明白的部分arr是指传递给destroyer函数的第一个参数;在这种情况下,阵列[1, 2, 3, 1, 2, 3]
  2. arr.filter使用Array.filter方法来创建阵列的“过滤”的版本,只有那些通过“测试”通过function(element) { return args.indexOf(element) === -1; }
  3. 定义的函数使用Array.indexOf值,以检查是否切片阵列(您正确识别为等于[2, 3])包含给定的element。因为indexOf返回-1时未找到该元件,检查其值等效于检查指定的元素不是阵列

所有这些的结果在 - 和功能destroy的返回值 - 将是数组[1, 1],表示传递给destroy的数组的过滤版本,其中包含的所有值不等于传递给销毁的其他值。

+0

对于最近的回复我很抱歉,但是我不清楚为什么我们必须检查这段代码是否正确?返回args.indexOf(element)=== -1;你可以请告诉我更多一点.. –

+0

这段代码是我们用来获取过滤列表的“测试”。我们想得到一个只包含不在'args'中的元素的列表。如果一个元素不在'args'中,那么'args.indexOf(element)'将等于-1,这就是我们正在检查的内容。 – Hamms

+0

谢谢我现在知道了,我在想如果我在驱逐舰上改变参数会返回错误,我想我们不需要=== -1因为它等于-1因为indexOf ,这让我感到困惑。 –

0

Array.slice是阵列的一部分prototype; prototype方法只能在类的实例上访问。

var arr = ['a', 'b', 'c', 'd']; 
// [] is JavaScript shorthand for instantiating an Array object. 
// this means that you can call: 
arr.slice(someArg1); 
arry.splice(someArg2);