Javascript:内部字符问题的字符串比较

时间:2018-01-30 06:34:13

标签: javascript

这里的小问题。我在下面遇到了这个挑战。

圣诞节即将到来,圣诞老人有很长的名单可以通过,找到谁应该为重要的一天提供礼物。浏览一个孩子列表,并返回一个列表,其中包含出现在圣诞老人列表中的每个孩子。不要多次添加任何孩子。输出应该排序。

比较应区分大小写,并且返回的列表仅返回每个名称的一个副本。 "萨姆"和" sam"是允许的,但" sAm"和" sAm"不是。

这是代码

function findChildren(santasList, children) {
    children.forEach(child => {
        santasList.forEach(s => {
            if(child.toLowerCase() === s.toLowerCase()){

                var longerLength = Math.max(child.length, s.length);
                for(var i = 0; i < longerLength; i++){
                    if (child[i] !== s[i]){
                        console.log(child);
                        return i;

                    }
                    console.log(child);
                    break;
                }
            }
        });

    });

}

let santasList = ["Tom", "Errol", "Sam", "mistyMay","Peter","Jennifer", 
"macMerphy"];
let children = ["Errol", "Peter", "jennifer", "mistymay", "MacMerphy"];

findChildren(santasList, children);

这打印; 埃罗尔 彼得 詹妮弗 mistymay MacMerphy

但我相信它应该打印; 埃罗尔 彼得 詹妮弗 MacMerphy?

修复的地方在哪里?

1 个答案:

答案 0 :(得分:0)

这是因为

if (child.toLowerCase() === s.toLowerCase()) {

以不区分大小写的方式进行比较

此外,您可以使用filterincludes

进一步改善您的代码(目前使用O(N ^ 3)
function findChildren(santasList, children) {
  return children.sort().filter( s => santasList.includes( s ) );
}

<强>演示

function findChildren(santasList, children) {
  return children.sort().filter( s => santasList.includes( s ) );
}

let santasList = ["Tom", "Errol", "Sam", "mistyMay", "Peter", "Jennifer",
  "macMerphy"
];
let children = ["Errol", "Peter", "jennifer", "mistymay", "MacMerphy"];

console.log(findChildren(santasList, children));