所以这是一个新手故障排除问题。我正在做freecodecamp的练习,我在解析我的函数输入时遇到了问题。这很简短,如果我只是告诉你代码,我想我可以切入追捕:
function destroyer(arr) {
// Remove all the values
console.log("---");
console.log("arr: " + arr);
var args = Array.from(arr);
console.log(args);
var in_i = arr[0];
return in_i.filter(function (x) {
if (args.indexOf(x) !== -1) {
return true;
} else {
return false;
}
});
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
这让我在控制台(我认为这是一个奇怪的部分):
---
arr: 1,2,3,1,2,3
[1, 2, 3, 1, 2, 3]
显然,我对arguments objects没有理解,或者有些事情被打破了。根据我的经验,后者非常罕见。我原以为Array.from(arr)
会给出一个数组对象:[[1, 2, 3, 1, 2, 3], 2, 3]
。
答案 0 :(得分:1)
函数function destroyer(arr)
只接受函数驱逐舰中的1个参数,这是一个数组[1, 2, 3, 1, 2, 3]
而忽略其他参数{{1} }。因此,2, 3
为arr
。
如果您需要访问传递给函数的所有参数,那么您可以使用[1, 2, 3, 1, 2, 3]
对象,这是数组,如对象。 arguments
会指向数组arguments
。以下代码应显示传递的参数。
[[1, 2, 3, 1, 2, 3], 2, 3]

如果您的函数采用如下所示的3个参数,则添加了function destroyer(arr, param2, param3) {
// Remove all the values
console.log(arguments);
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
,那么您可以在函数内访问值2,3。
param2, param3
答案 1 :(得分:0)
事实上,困扰我的部分是在MDN上,使用arguments
变量不仅仅是说明性的,它是一个内置变量。 @Agalo指出我在控制台上获得的值只是数组,它点击了我。
解决方案是通过内置arguments object
访问额外参数,该内置arguments
自动拥有(保留)名称function destroyer(arr) {
// Remove all the values
var args_l = arguments.length;
var args = Array.from(arguments);
console.log(args);
var in_i = args.shift();
return in_i.filter(function (x) {
if (args.indexOf(x) !== -1) {
return false;
} else {
return true;
}
});
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
。代码是这样的(为了完整性,我应该注意到我在return语句中也有错误和真实的切换):
function destroyer(arr) {
// Remove all the values
console.log(arguments);
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
为了Ag离开Agalo,你会注意到你实际上并不需要函数定义中的param2,param3参数来获得完全相同的输出:
function args_tester(a) {
console.log("a: " + a);
console.log("arguments: " + arguments);
console.log("arguments_as_array: " + Array.from(arguments));
for (var i = 0; i < arguments.length; i++) {
console.log(arguments[i]);
}
}
args_tester("a", "b", "c");
&#13;
冒着过分指责的风险:
(function () {
'use strict'
angular.module('MainApp').factory('GetData', ['$http', function ($http) {
return {
getCountries: function (url, No) {
return $http({
method: "GET",
url: url,
DNo: No,
});
}
}
}]);
})();
I have injected this factory to my controller and used as below.
GetData.getCountries('/General/API/GetDetails', $scope.No).then(function (res) {
console.log(res.data);
}, function (res) {
});
}
and here is my API.
public JsonResult GetDetails(string DNo)
{
var allCntry = entity.spGetCountries(DNo).ToList();
return Json(allCntry, JsonRequestBehavior.AllowGet);
}
&#13;