首先,.includes
方法不适用于我的框架,因此在此省略。
我有checkIn(el,ar)
函数来检查el
中的ar
是否像这样:
function checkIn(el){
var check = false;
for (i = 0; i < ar.length; i++){
if(el === ar[i]){
check = true;
break;
};
};
return check;
};
正常运行。然后,我想使用.every
方法检查给定数组的每个元素是否在另一个给定数组中
var x = [1,2,3];
var y = [1,2,3,4,5];
var check = x.every(checkIn(y))
check
必须为真,但这不起作用吗?
答案 0 :(得分:1)
.every
接受一个回调,该回调的第一个参数是要迭代的数组的元素。。如果您想使用
x.every(checkIn(y))
然后checkIn
应该返回一个可用作回调的函数:
function checkIn(containingArr) {
return item => containingArr.includes(item);
};
var x = [1, 2, 3];
var y = [1, 2, 3, 4, 5];
console.log(x.every(checkIn(y))); // every item in x is in y; true
console.log([0].every(checkIn(y))); // 0 is not in y; false
或者,使用类似于您的for
循环的方法:
function checkIn(ar) {
return el => {
var check = false;
for (i = 0; i < ar.length; i++) {
if (el === ar[i]) {
check = true;
break;
};
};
return check;
};
}
var x = [1, 2, 3];
var y = [1, 2, 3, 4, 5];
console.log(x.every(checkIn(y)));
console.log([0].every(checkIn(y)));
答案 1 :(得分:0)
首先,您的checkIn(el,ar)
只需要花费el
,因此,如果您没有遇到任何错误,则可以访问可能包含以下内容的全局变量或范围外变量ar
在那种情况下没有意义的数据。
如果只想检查数组是否包含特定值,则有一种非常简单的方法:
[1,2,3].includes(3) //true
[1,2,3].includes(6) //false
要使用.every
外推到整个数组,需要传递一个lambda或函数,而不仅仅是传递函数调用,像这样:
var xs = [1, 2, 3];
var ys = [1, 2, 3, 4, 5];
xs.every(x => ys.includes(x))
其中x => ys.includes(x)
是function(x){return ys.includes(x)}
的简写
或使用您的checkIn(el,ar)
xs.every(x => checkIn(x,ys))
答案 2 :(得分:0)
函数checkIn
看起来很多余。
function checkIn(el, ar) {
let check = false;
for (let i = 0; i < ar.length; i++) {
if (el === ar[i]) {
check = true;
break;
};
};
return check;
};
为什么不使用Array.prototype.includes
?
顺便说一句,函数every
的第一个参数应该是function
,但是您传递的是checkIn
的结果,类型为boolean
。
我们可以这样做。
x.every((e) => y.includes(e))