在数组中找到一个数组是否有任何优雅的功能?使用Javascript

时间:2016-03-08 07:05:57

标签: javascript arrays underscore.js

我想检查数组是否包含值数组而不是值,例如

stdout

var arr = [1, 2, 3]; arr.contains([1, 2]); // returns true // and arr.contains([1, 5]); // must be false underscore中有一个名为contains的方法,但它在javascript中的作用类似_.contains,而不是返回true和false,只找到一个值,而不是一个数组

在javascript中还有一个方法Array.prototype.includes(),它也采用单输入而不是数组

5 个答案:

答案 0 :(得分:1)

  

实际上我想检查第二个数组是否包含所有键   我要查看第一个数组AND

     

例如[1,2,3,4].contains([1,4])必须返回true,因为[1,2,3,4].contains([1,9])必须返回false,希望这是有道理的,   我现在使用下划线交叉点和第二个数组   交叉结果必须相同,其程序仍然很长......

您可以在Array.prototype.includes()循环中使用for



var arr = [1,2,3,4];

function contains(arr) {
  for (var i = 0, included = true; i < arr.length
       ; included = included && this.includes(arr[i]), i++);
  return included
}

Array.prototype.contains = contains;

console.log(arr.contains([1, 4]), arr.contains([9, 1]), arr.contains([1, 5]))
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您可以使用every和indexOf

的组合
[1, 2].every(function(e) { return [1, 2, 3].indexOf(e) !== -1 });

将评估为true和

[1, 5].every(function(e) { return [1, 2, 3].indexOf(e) !== -1 });

将评估为false

使用箭头功能

的ES6语法会短得多
[1, 2].every(e => [1, 2, 3].indexOf(e) !== -1)

答案 2 :(得分:0)

您可以使用every

function contains(arr, arr2) {
  return arr2.every(function (el) {
    return arr.indexOf(el) > -1;
  });
}

var arr = [1, 2, 3];
contains(arr, [1, 2]); // true
contains(arr, [1, 5]); // false

或者,如果您需要[].includes - 样式语法,可以在原型中添加方法,但也可以使用其他方法 - 我已经使用了hasAll

if (!('hasAll' in Array.prototype)) {
  Array.prototype.hasAll = function(arr) {
    return arr.every(function(el) {
      return this.indexOf(el) > -1;
    }, this);
  }

arr.hasAll([1, 2])); // true
arr.hasAll([1, 5])); // false

DEMO

答案 3 :(得分:0)

试试这个简单的例子

var arr = [1, 2, 3];
var searchArr = [1,2];
var isSearchArrAvailable = searchArr.filter( function(value){ if ( arr.indexOf( value ) == -1 ) { return true } else { return false; } } ).length == 0;
console.log( "is SearchArr Available " + isSearchArrAvailable );//this will print true

var searchArr = [1,5]将打印false

您可以将其重构为函数

function hasEveryElement(arr, searchArr)
{
   return searchArr.filter( function(value){ if ( arr.indexOf( value ) == -1 ) { return true } else { return false; } } ).length == 0;
}
console.log( hasEveryElement([1,2,3], [1,2]) ) ;
console.log( hasEveryElement([1,2,3], [1,4]) ) ;

答案 4 :(得分:0)

Try this:
var arr = [1,2,3];
var temparr=[1,2];
var st=ArrOfArrSt(arr,temparr); 

function ArrOfArrSt(arr,temparr){
    var stArr= new Array(); 
    if(temparr.length>0)
        for(j in temparr){
                if(arr.indexOf(temparr[j])==-1){
                   stArr.push('0'); 
                }
        }
  return (stArr.length>0)?0:1; //whole array 0=not belong to / 1=belong to  
}