【问题标题】:compare elements positions in first array with another array将第一个数组中的元素位置与另一个数组进行比较
【发布时间】:2014-11-20 21:17:39
【问题描述】:

当我需要比较两个数组时,我被困在游戏中。两个数组都包含数字。第一个数组对数字进行了排序,第二个数组按用户顺序排列了数字。我试图实现的是:比较这些数组并在用户数组中找到错误的位置(如果存在)并返回错误位置的数字。

我尝试过的:

var a = ["1","2","3","4","5"];
var d = ["1","2","3","5","4"];

function checkArrays( arrA, arrB ){

    if(arrA.length !== arrB.length) return false;

    var cA = arrA.slice().sort().join(","); 
    var cB = arrB.slice().sort().join(",");

    return cA===cB;

}

编辑: randomArrayGenerated.push(generateRandoms(0,99)); - 其中 generateRandoms 是一个函数。在 for 中,我推入 randomArrayGenerated 一些数字,因此数组的长度会有所不同。

correctOrderArray.push(randomArrayGenerated.sort(function(x, y){return x-y})); - 添加正确的OrderArray,随机数组中的元素,但已排序。

userArray.push(userOrder); - 其中 userOrder 是一个从输入中获取值的变量。

如果 userArray.length == correctOrderArray.length - 我想使用 correctOrderArray.find(function(a, b){ return a !== userArray[b] }) 比较这些数组

为什么不工作? (Uncaught TypeError: undefined is not a function)

【问题讨论】:

  • 你不能用 for 循环轻松做到这一点吗?
  • 你需要确认他们都有所有的数字,还是你只想知道第一个数字在错误的位置?
  • 我需要检查与排序数组相比,用户数组中是否存在错误定位的数字,并从用户数组返回错误位置的数字(不是位置)。就像上面的示例一样,如果我们将 a 与 b 进行比较,其中 b 是用户数组,我只需要返回 5,4 或 4,5 与顺序无关,因为您可以看到,如果您与数组进行比较,则 4 和 5 会切换。

标签: javascript jquery arrays


【解决方案1】:
var a = ["1","2","3","4","5"];
var d = ["1","2","3","5","4"];
var wrongPositioned = false;

function checkArrays( arrA, arrB ){

    if(arrA.length !== arrB.length) return false;

    for (var i = 0; i< arrA.length; i++) {
        if (arrA[i] !== arrB[i]) {
           wrongPositioned = {
               position: i, 
               value: arrA[i],
               userValue: arrB[i],
               valuePositionInUser: arrA.indexOf(arrB[i])
           };
           break;  
        }
    }

    return wrongPositioned;

}

【讨论】:

    【解决方案2】:

    它只是一个循环。

    function checkArrays( arrA, arrB ){
        for(var i = 0; i < arrA.length; i++) { if(arrA[i] !== arrB [i]) return arrB [i] };
    }
    

    http://jsfiddle.net/hL257bh6/

    如果您被允许使用 ECMAScript 6

    a.find(function(v, i){ return v !== d[i] })
    

    【讨论】:

    • 不要在 for 循环中使用 return
    • 之后,返回-1;
    • @Shiala 是的,目的是从函数返回匹配值。根据问题,我认为创建附加变量没有任何价值。
    • @Shiala。不,它不会。这是对退货的完全合法使用。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
    • 是的,我认为它会,但那只是当你不在函数内时
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多