我有一个小功能,它应该抓取数组的元素" arr "然后创建一个新数组" arrNew "在变量 func == true 的条件下,其中只包含第一个数组的元素。
函数赋值是显示数组 arr 中包含条件 arr [i]%2 == 0。
的元素。现在功能工作不是很好,因为 - console.log(arr)和下一个结果是一样的;
(7) [1, 2, 3, 4, 5, 6, 7] and (7) [1, 2, 3, 4, 5, 6, 7]
function filter(arr, func) {
var arrNew = [];
for (var i = 0; i < arr.length; i++) {
if (func = true) {
arrNew[i] = arr[i];
}
}
return arrNew;
}
var arr = [1, 2, 3, 4, 5, 6, 7];
console.log(arr);
console.log(filter(arr, function(a) {
return a % 2 == 0;
})); // 2,4,6
------------------------------------- UPDATE --------- -------------------------------
我在if (func = true)
上更改了if (func(arr[i]) == true)
,现在功能正常。
但是我有一个额外的问题,当我在第一个文件中添加了一个额外的功能。 第一个是正常工作,但第二个是错误&#34; func不是函数&#34;在字符串中的第一个&#34; if(func(arr [i])== true)&#34;。我不明白为什么......
所以,第一个函数的替换很好。但第二个 - 错误:( ...
function filter(arr, func) {
var arrNew = [];
for (var i = 0; i < arr.length; i++) {
if (func(arr[i]) == true) {
arrNew.push(arr[i]);
}
}
return arrNew;
}
function inBetween(a, b) {
var arrayBtw = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i] >= a && arr[i] <= b) {
arrayBtw.push(arr[i]);
}
}
return arrayBtw;
}
var arr = [1, 2, 3, 4, 5, 6, 7];
console.log(filter(arr, function(a) {
return a % 2 == 0;
})); // 2,4,6
console.log( filter(arr, inBetween(3, 6)) ); // 3,4,5,6
答案 0 :(得分:4)
你做错了。您已经使用了一个赋值运算符,您应该使用比较运算符。此外,您还需要使用arr.push()
将新元素附加到数组中。
您的代码需要更改为:
if (func(arr[i]) === true) {
arrNew.push(arr[i]);
}
由于其他人已经指出了这一点,我将添加更多内容。要获得相同的结果,您可以使用内置的Javascript filter
函数。
var arr = [1, 2, 3, 4, 5, 6, 7];
var arrNew = arr.filter(function(a){
return a % 2 == 0;
});
console.log(arrNew);
或者以更简洁和紧凑的方式做同样的事情,你可以使用arrow function
。
var arrNew = arr.filter(a => a % 2 == 0);
这一个班轮将产生相同的结果;)希望它有所帮助。
===回答更新的问题===
您收到func is not a function
的错误,因为在以下行中,您将inBetween(3, 6)
作为第二个参数传递给filter
函数。
console.log(filter(arr, inBetween(3, 6)));
但是,您的filter
函数期望function
类型作为第二个参数,而您的inBetween
函数返回array
(而不是“function
“对象”。您需要从function
;)
inBetween
如果没有,并且你试图获得在3和6之间可以被2整除的数字,那么你已经以错误的顺序传递了值:)改变顺序就可以了。
console.log(filter(inBetween(3, 6), function (a) {
return a % 2 == 0;
})); //4,6
如果您只想将数字设置在3到6之间(没有任何过滤,请参考您评论的预期输出),那么您不需要外部过滤方法调用。只需删除它。
console.log(inBetween(3, 6)); // 3,4,5,6
希望有所帮助:)
答案 1 :(得分:3)
代码有一些错误,首先不是
func = true
是func(arr[i]) === true
而不是arrNew[i] = arr[i];
,你应该arrNew.push(arr[i]);
您需要调用该函数,并且您将该函数指定为不比较
答案 2 :(得分:2)
而不是
if (func = true)
试
if (func(arr[i]) == true)
而不是
arrNew[i] = arr[i];
试
arrNew.push(arr[i]);
另请注意,JavaScript已具有数组过滤功能,有关详细信息,请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter。
答案 3 :(得分:1)
if (func = true) {
^这是一项任务。您将值true
分配给变量func
。您想要调用该函数,因此func(arr[i])
而不是func
。