每种方法在javascript中均不起作用

时间:2018-12-08 03:24:18

标签: javascript arrays

首先,.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必须为真,但这不起作用吗?

3 个答案:

答案 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))