【问题标题】:Is there a way to check if an array holds more than one value? [closed]有没有办法检查一个数组是否包含多个值? [关闭]
【发布时间】:2016-01-07 17:45:16
【问题描述】:

例如,如果我需要我的代码在数组列表中包含一组特定的数字以使某些事情发生,该怎么办?例如这个数组 [1,3,4,5,9]。有什么方法可以检查一个数组是否以相同的顺序同时包含所有这些整数?

【问题讨论】:

  • 我建议使用 JS 库,例如 Underscore,它正好有你想要的 the method
  • “这正是你想要的方法”,只是它不测试订单
  • 你应该展示你迄今为止所尝试的。通常要求推荐的工具和库是题外话。

标签: javascript arrays netbeans arraylist integer


【解决方案1】:
var arraySearch = function (subArray,array ) {
    var i = -1;
    return subArray.every(function (v) {
            if(i != -1) {
                i++;
                return (array.indexOf(v) === i)
            }
            i = array.indexOf(v);
            return  i >= 0;
    });
};

var arr = [1,3,4,5,9];

console.log(arraySearch([4,5],arr))

【讨论】:

  • 你应该切换参数,名字很混乱
  • 是的,又改了:)
  • 你应该为这项工作投赞成票,但请注意,OP 没有说搜索是否必须针对 连续 数字,只是说它是针对 ordered 数字。
【解决方案2】:

{1,3,4,5,9} 不是数组。就此而言,它在 Javascript 中是无效的。

myArray = [1,3,4,5,9] 是一个数组。您可以使用myArray.length 检查它包含的元素数量。

有什么方法可以检查一个数组是否包含所有这些 整数一次并以相同的顺序?

为此,您必须提供自己的一些代码并首先展示您尝试过的内容。

【讨论】:

  • 哦,一个无法解释的反对票,已经很久了。
  • 如果我理解正确(顺便说一句,这很难),OP 想检查一个数组是否完全包含另一个数组。注意:我没有投反对票。
  • 是的,但是 OP 没有提供任何代码,并希望这里的人们为他们提供解决方案并为他们开发东西。这不是我们来这里的目的。
【解决方案3】:

基础

检查一个数组是否只包含一个元素, 您可以简单地检查indexOflastIndexOf 是否产生完全相同的值并且大于或等于零。

var array = [1,2,3,3,3];

function isContainOnce(array,num){
    return array.indexOf(num)>=0 && array.indexOf(num)==array.lastIndexOf(num)
}

// Try it
isContainOnce(array,3); // false
isContainOnce(array,10); // false
isContainOnce(array,1); // true

现在您可以迭代检查此类元素的出现情况

function isContain(arr,sub){
   var subArray = sub.slice();
   var k = null;
   while (subArray.length>0){
     var s = subArray.shift(); // Take the first element to test
     var i = arr.indexOf(s);
     var j = arr.lastIndexOf(s);
     if (i<0 || i!=j) return false; // Does not exist once
     if (k && i-k!=1) return false; // Not in order
     k = i;
  }
  return true;
 }

检查[1,3,4,5,9,10,11,11]是否包含一个子数组[1,3,4,5,9],所有元素的顺序相同:

isContain([1,3,4,5,9,10,11,11], [1,3,4,5,9]);  // TRUE

其他情况

isContain([1,3,4,5,9,10,11,11], [5,9,10]); // TRUE
isContain([1,3,4,5,9,10,11,11], [2,3]); // FALSE
isContain([1,3,4,5,9,10,11,11], [10,11]); // FALSE because 11 occurs twice

【讨论】:

  • OP 不是说“once”而是“at once”,所以整个代码可能没有做他想做的事。
【解决方案4】:

如果是完全匹配:

yourArray.toString() === "1,3,4,5,9";

如果您要搜索的数字是数组的子集,中间可能有额外的数字,则您必须遍历元素。

【讨论】:

  • 这将错误地为数组[1,3,4,5,91]返回true
  • @RodolfoAndrade 好收获 :-)
  • 已修复(对不太清楚的问题的假设更少)。
猜你喜欢
  • 1970-01-01
  • 2020-05-07
  • 1970-01-01
  • 1970-01-01
  • 2017-10-17
  • 2021-03-09
  • 2021-06-06
  • 1970-01-01
相关资源
最近更新 更多