JavaScript-比较具有有限值/元素的两个数组

JavaScript-比较具有有限值/元素的两个数组,javascript,arrays,Javascript,Arrays,我有一个由几个数字或字符串组成的数组,例如 [4.3, 1.2, 4.5, 3.9] ['I', 'the', 'sheriff', 'shot'] 用户按特定顺序重新排列元素。例如,按升序排列: [1.2, 3.9, 4.3, 4.5] 并创建一个有效的句子: ['I', 'shot', 'the', 'sheriff'] 我将这些预定义的答案存储在一个对象中。如何将具有用户生成顺序的数组与具有正确元素顺序的数组进行比较。我已经看到了关于如何比较数组的其他答案,但我的问题并不需要其他答

我有一个由几个数字或字符串组成的数组,例如

[4.3, 1.2, 4.5, 3.9]

['I', 'the', 'sheriff', 'shot']
用户按特定顺序重新排列元素。例如,按升序排列:

[1.2, 3.9, 4.3, 4.5]
并创建一个有效的句子:

['I', 'shot', 'the', 'sheriff']
我将这些预定义的答案存储在一个对象中。如何将具有用户生成顺序的数组与具有正确元素顺序的数组进行比较。我已经看到了关于如何比较数组的其他答案,但我的问题并不需要其他答案所具有的广泛的“如果……会怎么样”。这些元素是由应用程序生成的,因此不会出现意外的输入、没有未定义的值、没有空元素等。用户不会输入任何内容。他们只是用这些元素重新排列瓷砖

比较阵列以确定用户是否以正确的方式重新排列了框的最佳方法是什么

我的第一次尝试是不正确的,因为它似乎总是输出“宾果”,即使顺序不正确:

if (this.props.squares === correctOrder) {
      console.log("BINGO");
    }

我将使用所有数组都具有的每个函数

const isCorrect = this.props.squares.every((square, index) =>
  correctOrder[index] === square);

最简单的方法是迭代所有元素并比较:

function arraysEqual(array1, array2) {
    for(var i = array1.length; i--;) {
        if(array1[i] !== array2[i])
            return false;
    }

    return true;
}
例:


希望有帮助。

您可以在对象中存储所需的顺序,其中第一个数组的值是键,排序后的索引是值

为了检查顺序是否正确,只需使用objects值和实际索引检查items数组

var项目=[1.2,3.9,4.3,4.5],
顺序=项目。减少((o,k,i)=>(o[k]=i,o),{});
//检查

items.every((k,i)=>order[k]==i)和&console.log('bingo')如果您不介意使用
lodash
,这也是一个选项

_.isEqual(this.props.squares, correctOrder);

比较第一个元素,然后是第二个元素,然后是第三个元素。。。如果所有元素都匹配->BINGOis(o[k]=i,o)中“o”之前的逗号。当有一个“i”值时,“i”是在“o”之前计算的吗?@箭头,它是一个逗号运算符,当我需要返回对象时,它首先计算赋值,然后返回最后一部分,
o
_.isEqual(this.props.squares, correctOrder);