我们需要编写一个函数,说它isEqual()
接受两个字符串作为参数,并检查它们是否都包含相同的字符,而与它们的顺序和大小写无关。
例如-
const first = 'Aavsg'; const second = 'VSAAg'; isEqual(first, second); //true
在此方法中,我们将字符串转换为数组,利用Array.prototype.sort()方法,将其转换回字符串并检查是否相等。
为此的代码将是-
const first = 'Aavsg'; const second = 'VSAAg'; const stringSort = function(){ return this.split("").sort().join(""); } String.prototype.sort = stringSort; const isEqual = (first, second) => first.toLowerCase().sort() === second.toLowerCase().sort(); console.log(isEqual(first, second));
在这种方法中,我们同时迭代两个字符串,将字符频率存储在映射中,其值如下所示:
-1, if it appears in the first string, +1, if it appears in the second string,
最后,如果所有键的总和为0,我们得出的结论是字符串相同,否则相同。
为此的代码将是-
const first = 'Aavsg'; const second = 'VSAAg'; const isEqual = (first, second) => { if(first.length !== second.length){ return false; } first = first.toLowerCase(); second = second.toLowerCase(); const map = {}; for(ind in first){ if(map[first[ind]]){ map[first[ind]]++; }else{ map[first[ind]] = 1; } if(map[second[ind]]){ map[second[ind]]--; }else{ map[second[ind]] = -1; } }; return Object.values(map).reduce((acc, val) => val === 0 && acc, true); }; console.log(isEqual(first, second));
输出结果
两者在控制台中的输出将是-
true