我有一些数字或字符串的数组,例如
[4.3, 1.2, 4.5, 3.9]
['I', 'the', 'sheriff', 'shot']
用户按特定顺序重新排列元素。例如,按升序排列:
[1.2, 3.9, 4.3, 4.5]
并创建一个有效的句子:
['I', 'shot', 'the', 'sheriff']
我将这些预定义的答案存储在一个对象中。如何将具有用户生成顺序的数组与具有正确元素顺序的数组进行比较。我已经看到了关于如何比较数组的其他答案,但我的问题并不需要广泛的“如果......'其他答案了。这些元素由应用程序生成,因此不存在任何意外输入,没有未定义的值,没有空元素等。用户不输入任何内容。他们只是用那些元素重新排列瓷砖。
比较数组以确定用户是否以正确方式重新排列框的最佳方法是什么。
我的第一次尝试是不正确的,因为它似乎总是输出' BINGO'即使订单不正确:
if (this.props.squares === correctOrder) {
console.log("BINGO");
}
答案 0 :(得分:4)
我会使用所有数组都有的every
函数。
const isCorrect = this.props.squares.every((square, index) =>
correctOrder[index] === square);
答案 1 :(得分:2)
您可以将所需订单存储在一个对象中,其中第一个数组的值是键,而排序的索引是值。
如果检查顺序是否正确,只需检查items数组中的对象值和实际索引。
var items = [1.2, 3.9, 4.3, 4.5],
order = items.reduce((o, k, i) => (o[k] = i, o), {});
// check
items.every((k, i) => order[k] === i) && console.log('bingo');

答案 2 :(得分:1)
最简单的方法是遍历所有元素并进行比较:
function arraysEqual(array1, array2) {
for(var i = array1.length; i--;) {
if(array1[i] !== array2[i])
return false;
}
return true;
}
例如:
arraysEqual(["I", "am", "well"], ["I", "am", "not", "well"]) // returns false
arraysEqual(["I", "am", "well"], ["I", "am", "well"]) // returns true
希望它有所帮助。
答案 3 :(得分:0)
如果您不介意使用lodash
,这也可以选择。
_.isEqual(this.props.squares, correctOrder);