ฟังก์ชันเปรียบเทียบสองอาร์เรย์เพื่อตรวจสอบว่าทั้งสองมีองค์ประกอบเดียวกันหรือไม่ แม้ว่าพวกเขาจะออกคำสั่ง ...
เหมาะสำหรับอาร์เรย์ธรรมดา [String, Number, Boolean, null, NaN]
ฉันไม่ได้ใช้ .ort () มันแก้ไขอาร์เรย์เดิม บางคนบอกว่ามันแย่ ...
ข้อควรระวัง. ฟังก์ชันนี้มีข้อ จำกัด ไม่สามารถเปรียบเทียบ Objects "[], {}" หรือฟังก์ชันภายใน Arrays เหล่านี้ได้อาร์เรย์ของตัวเองคือ Objects
let arraysHasSameElements = (arr1, arr2) => {
let count =
// returns counting of occurrences.
(arr, val) => arr.reduce((count, curr) => (curr === val ? 1 : 0) + count, 0);
/* this will return true if lengths of the arrays is equal.
then compare them.*/
return arr1.length === arr2.length
// compare arr1 against arr2.
&& arr1.reduce((checks, val) =>
/* creating array of checking if a value has equal amount of occurrences
in both arrays, then adds true 'check'. */
checks.concat(count(arr1, val) === count(arr2, val)), [])
// checking if each check is equal to true, then .every() returns true.
.every(check => check);
}
let arr1 = ['',-99,true,NaN,21,null,false,'help',-99,'help',NaN],
arr2 = [null,-99,'',NaN,NaN,false,true,-99,'help',21,'help'];
arraysHasSameElements(arr1, arr2); //true
let arr3 = [false,false,false,false,false,false],
arr4 = [false,false,false,false,false,false]
arraysHasSameElements(arr3, arr4); //true
// here we have uncommented version.
let arraysHasSameElements = (arr1, arr2) => {
let count = (arr, val) => arr.reduce((count, curr) => (curr === val ? 1:0) + count, 0);
return arr1.length === arr2.length && arr1.reduce((checks, val) =>
checks.concat(count(arr1, val) === count(arr2, val)), []).every(check => check);
}