匹配字谜并推送到数组
Matching anagrams and pushing to an array
我有一个给定的 word
,我想匹配给定的单词列表 mainList
,并确定该给定列表中的哪些单词是给定单词的变位词,然后添加他们到另一个列表,subList
.
我觉得我的方法很好,但是returns出乎意料的结果。
例如...
var word = 'master';
var mainList = ['stream', 'pidgeon', 'maters'];
var subList = [];
然后我把这个词拆分成一个字母数组,按字母顺序排列,然后重新连接成一个字符串。有了这个字符串,我应该能够匹配任何可能的字谜(我将以同样的方式隐藏)。
var mainSorted = [];
for (i = 0; i < word.length; i++) {
mainSorted = word.split('').sort().join();
}
这是错误的地方。我遍历 mainList
数组,试图确定给定项目在转换后是否与原始项目匹配。如果是这样,我想 push
这个词到 subList
数组。
for (var i = 0; i < mainList.length; i++) {
var subSorted = mainList[i].split('').sort().join;
if (mainSorted === subSorted) {
subList.push(mainList[i])
}
}
return subList;
...我希望看到的 subList 的值是:['stream', 'maters']
然而我返回的是一个空数组。
我已经经历过很多次了,但我看不出出了什么问题,非常感谢您的帮助!
此外,我知道可能有更多 eloquent 方法可以做到这一点(我欢迎任何建议)但主要是我想看看哪里出了问题。
提前致谢。
你忘记了加入结束时的 ()
var subSorted = mainList[i].split('').sort().join;
应该是
var subSorted = mainList[i].split('').sort().join();
一个非问题是
for (i = 0; i < word.length; i++) {
mainSorted = word.split('').sort().join();
}
不需要循环
mainSorted = word.split('').sort().join();
一个人就够了
作为奖励,这里有一个更简洁的方法来做你正在做的事情
var word = 'master';
var mainList = ['stream', 'pidgeon', 'maters'];
var mainSorted = word.split('').sort().join();
return mainList.filter(function(sub) {
return sub.split('').sort().join() == mainSorted;
});
我有一个给定的 word
,我想匹配给定的单词列表 mainList
,并确定该给定列表中的哪些单词是给定单词的变位词,然后添加他们到另一个列表,subList
.
我觉得我的方法很好,但是returns出乎意料的结果。
例如...
var word = 'master';
var mainList = ['stream', 'pidgeon', 'maters'];
var subList = [];
然后我把这个词拆分成一个字母数组,按字母顺序排列,然后重新连接成一个字符串。有了这个字符串,我应该能够匹配任何可能的字谜(我将以同样的方式隐藏)。
var mainSorted = [];
for (i = 0; i < word.length; i++) {
mainSorted = word.split('').sort().join();
}
这是错误的地方。我遍历 mainList
数组,试图确定给定项目在转换后是否与原始项目匹配。如果是这样,我想 push
这个词到 subList
数组。
for (var i = 0; i < mainList.length; i++) {
var subSorted = mainList[i].split('').sort().join;
if (mainSorted === subSorted) {
subList.push(mainList[i])
}
}
return subList;
...我希望看到的 subList 的值是:['stream', 'maters']
然而我返回的是一个空数组。
我已经经历过很多次了,但我看不出出了什么问题,非常感谢您的帮助!
此外,我知道可能有更多 eloquent 方法可以做到这一点(我欢迎任何建议)但主要是我想看看哪里出了问题。
提前致谢。
你忘记了加入结束时的 ()
var subSorted = mainList[i].split('').sort().join;
应该是
var subSorted = mainList[i].split('').sort().join();
一个非问题是
for (i = 0; i < word.length; i++) { mainSorted = word.split('').sort().join(); }
不需要循环
mainSorted = word.split('').sort().join();
一个人就够了
作为奖励,这里有一个更简洁的方法来做你正在做的事情
var word = 'master';
var mainList = ['stream', 'pidgeon', 'maters'];
var mainSorted = word.split('').sort().join();
return mainList.filter(function(sub) {
return sub.split('').sort().join() == mainSorted;
});