【问题标题】:javascript check if array contains multiple elements in a rowjavascript 检查数组是否连续包含多个元素
【发布时间】:2018-06-15 10:02:21
【问题描述】:

我想知道是否可以在数组中搜索连续的多个项目,类似于下面的内容。我已经使用单独的包含来完成它,但这不允许我判断元素是在一行中还是彼此靠近。

数组未排序,数字必须按定义的顺序排列。接近连续,特别是 3。所以在 (12,23,45,34) 内搜索 (23,34,45) 将是错误的。

谢谢

var num = [];
num.push(12,23,34,45,56,67,78,89,90);

if(num.includes(23,34,45)){
  print('found');
}

【问题讨论】:

  • 是的,这是可能的,但是您必须编写逻辑来检查它们是否是顺序的。您的确切要求尚不清楚 - 数组是否总是排序的?数字可以按任何顺序出现吗?什么是“近”?
  • 数组未排序,数字必须按定义的顺序排列。接近连续,特别是 3。因此在 (12,23,45,34) 内搜索 (23,34,45) 将是错误的。谢谢。
  • “近”是什么意思?它们要么是连续的,要么不是。

标签: javascript arrays include row


【解决方案1】:

这行得通,我希望我正确理解了你的问题。

function foo(num1, num2, num3, arr) {
    var exists = false;

    for(var i = 0; i < arr.length; i++) {
        if(arr[i] == num1 && arr[i+1] == num2 && arr[i+2] == num3) {
            exists = true;
        }
    }

    console.log(exists);
}

var array = [12,23,34,45,56,67,78,89,90];

foo(23,34,45,array);

【讨论】:

  • @Andreas 在他的一个 cmets OP 中说“特别是 3”。
【解决方案2】:

使用 ES6 Set() 功能的另一种方式:

    var arr = [12,23,34,12,45,56,67,78,89,90];
    var set = new Set();
    arr.forEach(function(i){ set.add(i) });
    var foundCount = 0;
    
    var func = function(a){
        a.forEach(function(item) { 
          var oldLength = set.size; 
          set.add(item); 
          var newLength = set.size; 
          
          if(oldLength === newLength) { 
            foundCount++;
          }               
        });
        console.log('found ' + foundCount) 
    }
    
    var arr2 = [12, 34, 45];

    func(arr2);

【讨论】:

    猜你喜欢
    • 2018-04-22
    • 1970-01-01
    • 2016-10-13
    • 2022-01-02
    • 2017-11-24
    • 1970-01-01
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多