比较第一个数组中的元素位置与另一个数组

时间:2014-11-20 21:17:39

标签: javascript jquery arrays

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

我的尝试:

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 i中我将randomArrayGenerated推入一些数字,因此数组的长度会有所不同。

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

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

IF userArray.length == correctOrderArray.length - 我想使用correctOrderArray.find(function(a, b){ return a !== userArray[b] })

比较这些数组

为什么不起作用? (未捕获的TypeError:undefined不是函数)

2 个答案:

答案 0 :(得分: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;

}

答案 1 :(得分:0)

它只是一个循环。

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] })