我正在编写一个Javascript函数来计算未排序数组中元素的实例数。它有像这样的方法签名
Array.prototype.numberOfOccurrences = function() {
}
以下是预期行为的示例
var arr = [4, 0, 4];
Test.assertEquals(arr.numberOfOccurrences(4), 2);
我的问题是我不知道如何访问数组中的元素。该函数不接受任何参数,那么如何引用传入的数组?
注意:对于代码大战中的kata,说明并不具有描述性,并且向函数添加参数会返回一些错误意外的令牌。
答案 0 :(得分:2)
在您创建的Array.prototype函数中,您可以通过“this”关键字访问所有原型函数。
这意味着您可以使用数字属性(如[0]或此[1])访问数组项,以分别访问第一个和第二个项目。
您还可以调用允许您遍历数组上每个项目的函数,例如:forEach,filter等。
请参阅此页面以查看您可以使用阵列原型执行的所有操作: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype
最后不要忘记每个浏览器的JavaScript实现都有所不同,因此适用于Chrome的功能可能无法在InternetExplorer上运行,请始终在caniuse.com上确认如果您使用的功能在目标上具有相同的实现浏览器。
干杯。
答案 1 :(得分:1)
是否应该将javascript基础对象放在一边,this
是你的朋友:
Array.prototype.numberOfOccurrences = function(valueToFind) {
return this.filter(function(item) {
return item === valueToFind;
}).length;
}
var a = [1,2,3,3,3,3];
console.log(a.numberOfOccurrences(3)); //4
如上所述,如果您因任何原因无法更改功能签名,可以按如下方式指定:
Array.prototype.numberOfOccurrences = function() {
var valueToFind = arguments[0];
...
}
为了清楚起见,我建议将参数添加到函数中。对于像numberOfOccurences
这样的函数来说,似乎没有直观的反对意见来接受参数 - numberOfOccurences
的什么?
答案 2 :(得分:0)
您可以尝试在函数内部使用本地可用的变量'arguments'。例如,您的代码可能看起来像是:
Array.prototype.numberOfOccurrences = function() {
var args = arguments || {};
var testArray, testCheck;
if (args[0] && Array.isArray(args[0]) {
// do something with the array that was the first argument, like:
testArray = args[0];
testCheck = testArray.indexOf(args[1]);
return testCheck;
} else {
// do what you want to do if the function doesn't receive any arguments or the first argument
// received isn't an array.
}
}
在声明的函数中,'arguments'始终可用。