输出只能是:rabbit和bibe但是我弄错了列表中的所有内容都是打印的,因为最后一个索引也有'b',我怎么能打印只包含'bib'的指定元素呢
let str = 'bib'
let list = ['rabbit','bibe','bundle']
for(let i = 0; i < list.length;i++){
for(let j = 0; j < list[i].length; j++){
let foundIndex = str.indexOf(list[i][j])>-1
if(foundIndex === -1){
list.splice(foundIndex,1)
}else if(foundIndex){
console.log(list[i])
}
}
}
预期输出应为:
rabbit
bibe
3条答案
按热度按时间y1aodyip1#
这里有另一个解决方案,如果我们将字母“bib”排序为“bbi”。
如果我们对列表做类似的事情[“rabbit”,“bibe”,“bundle”]变成[“abbirt”,“bbei”and“bdelnu”]。如果我们过滤掉不在“bib”中的字母,列表会缩小到[“bbi”,“bbi”,“b”]。我们现在可以做的是检查结果列表中是否出现“bbi”。
下面是上面的一个中间实现:
下面是相同的代码,但golfed更多:
sg2wtvxw2#
一个简单的解决方案是计算给定字符串中每个唯一字符的数量,然后基于此过滤元素:如果一个元素具有所有这些字符,每个字符的数量相同或更高,那么它应该被保留。
首先,声明一个helper函数:
它将返回一个对象,看起来像这样:
Array
对象有一个非常方便的方法,名为.every()
,当且仅当回调函数对所有元素返回true时,该方法返回true
。我们想利用它,所以我们使用Object.entries()
将上面的对象转换为键值对数组:我们对列表中的每个元素(不是
Object.entries()
部分;我们不需要他们的.every()
):这是最棘手的部分:对于列表中的每个单词,我们检查它是否包含给定字符串中的每个字符,每个字符的数量相同或更高。如果是,
.every()
将返回true
,.filter()
将保留新列表中的单词:试试看:
w6mmgewl3#
你可以简单地通过
Array.every()
方法来实现这一点,该方法测试数组中的所有元素是否通过了所提供的函数实现的测试。它返回一个Boolean
值。现场演示**:**
根据作者评论更新答案**:**