匹配字谜并推送到数组

Posted

技术标签:

【中文标题】匹配字谜并推送到数组【英文标题】:Matching anagrams and pushing to an array 【发布时间】:2016-12-13 23:10:58 【问题描述】:

我有一个给定的word,我想匹配给定的单词列表mainList,并确定该给定列表中的哪些单词是给定单词的变位词,并将它们添加到另一个列表@ 987654323@.

我觉得我的方法很好,但它返回了一个意想不到的结果。

例如...

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']

但我返回的是一个空数组。

我已经经历了很多次,但我看不出出了什么问题,非常感谢一些帮助!

另外,我知道可能有更雄辩的方法可以做到这一点(我欢迎任何建议),但主要是我想看看哪里出了问题。

提前致谢。

【问题讨论】:

【参考方案1】:

你忘记了加入末尾的 ()

var subSorted = mainList[i].split('').sort().join; 

应该是

var subSorted = mainList[i].split('').sort().join();

一个非问题是

for (i = 0; i

不需要循环

 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;
);

【讨论】:

我一直在用头撞砖墙,而这一直是问题所在。哈。谢谢!! :) 不知道为什么我为mainSorted 做了一个循环,回想起来很明显。至于filter(),还没有真正开始使用它,但看起来是一个更好的选择——感谢这个提示。

以上是关于匹配字谜并推送到数组的主要内容,如果未能解决你的问题,请参考以下文章

如何设置状态并推送到数组?

从数组中获取对象并推送到新数组[重复]

$emit 对象到父组件,并推送到数组。数组中的对象仍然是反应性的,为啥?

Blazor 拖放上传文件转换格式并推送到浏览器下载

循环遍历两个对象数组以将匹配值推送到新数组在 React 中不起作用,但在 JS Fiddle 中起作用

获取数组中最大的字谜组