[英]JavaScript - compare two arrays with limited values/elements
我有一些數字或字符串組成的數組,例如。
[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");
}
我會使用所有數組都具有的every
函數。
const isCorrect = this.props.squares.every((square, index) =>
correctOrder[index] === square);
您可以將所需的順序存儲在一個對象中,其中第一個數組的值是鍵,而排序后的索引是這些值。
為了檢查順序是否正確,只需檢查具有對象值和實際索引的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');
最簡單的方法是遍歷所有元素並進行比較:
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
希望能幫助到你。
如果您不介意使用lodash
,則也可以選擇使用。
_.isEqual(this.props.squares, correctOrder);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.