我有两个问题
1)我怎样才能检查两个shuffle字符串是否有相同的字符 像我一样
var str1 = "ansar@#//1";
var str2 = "@#//sanra1";
应该返回true
2)如果没有相同的字符,那么第二次刺痛中不存在的字符
var str1 = "ansar@#//123";
var str2 = "@#//sanra";
应返回123
我知道我可以通过
获得第一个问题的答案str1.length===str2.length && str1.split("").sort().join() == str2.split("").sort().join();
但不确定如何让字符与第二个字符串
不匹配答案 0 :(得分:2)
考虑以下实施:
1)
var str1 = "ansar@#//1";
var str2 = "@#//sanra1";
function first(str1, str2) {
return Array.prototype.every.call(str1, function(c) {
return str2.indexOf(c) > -1;
}, this);
}
console.log(first(str1, str2));
2)
var str1 = "ansar@#//123";
var str2 = "@#//sanra";
function second() {
return Array.prototype.filter.call(str1, function(c) {
return str2.indexOf(c) === -1;
}, this).join('');
}
console.log(second(str1, str2));
答案 1 :(得分:2)
使用while循环似乎是一个合理的解决方案:
var str1 = "ansar@#//1";
var str2 = "@#//sanra12";
s1 = str1.split('');
s2 = str2.split('');
var i = s1.length + 1;
while (i--) {
if (s2.indexOf(s1[i]) >= 0)
s2.splice(s2.indexOf(s1[i]), 1);
}
console.log(s2)
结果数组表示str2
str1
字母
答案 2 :(得分:1)
如果两个字符串中的字符集相同,则返回空字符串。
function findDiff (str1, str2)
{
var diff = '';
if (str1.length > str2.length)
{
var search = str1;
var compare = str2;
}
else
{
var search = str2;
var compare = str1;
}
for (var i = 0; i < search.length; i++)
{
var symbol = search[i];
if (compare.indexOf(symbol) === -1)
{
diff += symbol;
}
}
return(diff);
}
findDiff("ansar@#//123", "@#//sanra");
答案 3 :(得分:0)
此代码可以帮助您根据自己的意愿获得输出。
var str1 = "ansar@#//g123";
var str2 = "@#//sanraD";
function strDiff(s1, s2){
var t,inter,a1,a2;
a1 = s1.split('');
a2 = s2.split('');
t = a2, a2 = a1, a1 = t;
inter = a1.filter(function (e) {
if (a2.indexOf(e) !== -1) return true;
});
for (i=0, len=inter.length; i<len; i++) {
for(var j = a1.length-1; j>=0;j--)
if (a1[j] === inter[i]) a1.splice(j, 1);
for(var k = a2.length-1; k>=0; k--)
if (a2[k] === inter[i]) a2.splice(k, 1);
}
if((a1.join('')+a2.join('')).length > 0)
return(a1.join('')+a2.join(''));
else
return "True";
}
var result = strDiff(str2,str1);
alert(result);
答案 4 :(得分:0)
如果两个字符串中的字符具有相同字符,则将返回 true 或 false ,我认为这是最有效的方法。
a)
function hasSameCharacter(str1, str2) {
let a = Array.prototype.every.call(str1, (char) => str2.indexOf(char) > -1, this);
if (a) return Array.prototype.every.call(str2, (char2) => str1.indexOf(char2) > -1, this);
else return false;
}
console.log(hasSameCharacter(str1, str2));
b)
function hasSameCharacter(str1, str2) {
for (let i = 0; i < str1.length; i++) {
if (str2.indexOf(str1[i]) <= -1) return false;
}
for (let i = 0; i < str2.length; i++) {
if (str1.indexOf(str2[i]) <= -1) return false;
}
return true;
}
console.log(hasSameCharacter(str1, str2));
希望这会有所帮助,祝您编程愉快:)
答案 5 :(得分:0)
所以我无法发表评论,因为我没有评级,但是我尝试了Yuriy Yakym的解决方案(第二种,非常感谢Yuriy,因为一开始我就一直在为此而苦苦挣扎),虽然在本示例中适用,但如果您在str1上添加另一个'a'字样,则不会向您显示str2实际上没有3个'a',因为它总是引用该字符的首次出现。本质上,您需要删除找到的字符,以确保您考虑到重复项,或者看起来如此。
我通过Yuriy的代码开发了以下内容,以使其对我有用。请自己测试。很高兴被不同意,但是似乎它将注销出现在str1中但没有出现在str2中的所有内容(包括重复项):
const sorter = (str1, str2) => {
const arr = str1.split("");
const newArray = arr.filter((c) => {
if (str2.indexOf(c) === -1) {
return str2.indexOf(c) === -1
} else {
str2 = str2.replace(c, '');
}
})
return newArray.join("");
};
console.log(sorter(str1, str2));