30秒学会 JavaScript 片段 · 2020年1月18日

30秒学会 JavaScript 片段 – haveSameContents

Returns true if two arrays contain the same elements regardless of order, false otherwise.

Use a for...of loop over a Set created from the values of both arrays.
Use Array.prototype.filter() to compare the amount of occurrences of each distinct value in both arrays.
Return false if the counts do not match for any element, true otherwise.

代码片段

const haveSameContents = (a, b) => {
  for (const v of new Set([...a, ...b]))
    if (a.filter(e => e === v).length !== b.filter(e => e === v).length) return false;
  return true;
};

使用样例

haveSameContents([1, 2, 4], [2, 4, 1]); // true