JS比较两个不同数组中SOME元素的顺序

时间:2017-11-15 19:42:22

标签: javascript arrays string-comparison

我试图找出如何比较两个数组中的某些元素是否以相同的顺序进行比较。



var compare = function (arr1, arr2) {
//........
}

compare ([f,t,r,m], [s,f,t,r,q,p,m]); //should return true

compare ([f,t,r,m], [f,a,t,,m,r]); //should return false




我继续进行for循环,然后确定值匹配的时间,然后我非常确定你应该比较数组,但我觉得我错过了什么。



var compare = function (a, b) {
  a.forEach(function(letter){
    for (i=0; i<b.length; i++) {
      if (letter===b[i]) {}
    }
  })
}
&#13;
&#13;
&#13;

4 个答案:

答案 0 :(得分:2)

使用Array#filterArray#indexOf删除第二个数组中不会出现在第一个数组中的所有字母。然后用Array#every迭代结果,并检查每个字符是否出现在第一个数组中的相同位置:

&#13;
&#13;
function compare(a, b) { 
  var arr = b.filter(function(c) { 
    return a.indexOf(c) !== -1; // use a hash object instead of indexOf if the arrays are large
  });
  
  return arr.every(function(c, i) {
    return c === a[i];
  });
}

console.log(compare(['f','t','r','m'], ['s','f','t','r','q','p','m'])); //should return true

console.log(compare(['f','t','r','m'], ['f','a','t','m','r'])); //should return false
&#13;
&#13;
&#13;

答案 1 :(得分:2)

这两个函数都将与TryCatchMethod()运行时进行比较,其中Ori Drori的解决方案在O(n)中运行

&#13;
&#13;
O(n^2)
&#13;
&#13;
&#13;

答案 2 :(得分:2)

您可以为array2取一个索引并在迭代时检查并返回索引与array2array1元素的比较。

&#13;
&#13;
function compare(array1, array2) {
    var i = 0;
    return array1.every(function (a) {
        while (i < array2.length && a !== array2[i]) {
            i++;
        }
        return a === array2[i++];
    });
}

console.log(compare(['f', 't', 'r', 'm'], ['s', 'f', 't', 'r', 'q', 'p', 'm'])); // true
console.log(compare(['f', 't', 'r', 'm'], ['f', 'a', 't', , 'm', 'r']));         // false
&#13;
&#13;
&#13;

答案 3 :(得分:0)

您可以执行以下操作;

function compare(a,b){
    return b.filter(e => a.includes(e))
            .every((e,i) => e === a[i])
}

console.log(compare(["f","t","r","m"], ["s","f","t","r","q","p","m"]));

console.log(compare(["f","t","r","m"], ["f","a","t","m","r"]));