练习问题我正在努力:
编写一个名为“findShortestWordAmongMixedElements”的函数。
给定
array
,findShortestWordAmongMixedElements
返回给定数组中的最短字符串。注意:
*如果有联系,它应该返回第一个出现在给定数组中的元素 *期望给定数组具有除字符串之外的值 *如果给定数组为空,则应返回空字符串 *如果给定的数组不包含字符串,则应返回空字符串。
目前我编码的是:
function findShortestWordAmongMixedElements(array) {
if (array.length === 0)) {
return '';
}
var result = array.filter(function (value) {
return typeof value === 'string';
});
var shortest = result.reduce(function (a, b) {
return a.length <= b.length ? a : b;
});
return shortest;
}
var newArr = [ 4, 'two','one', 2, 'three'];
findShortestWordAmongMixedElements(newArr);
//returns 'two'
一切正常但我无法弄清楚如何传递“如果给定的数组不包含字符串”测试。我在考虑在!array.includes(string??)
语句中添加某种if
,但我不确定该怎么做。
任何提示?甚至更聪明的方式来编写这个功能
答案 0 :(得分:4)
“一切正常,但我无法弄清楚如何传递”如果给定的数组不包含任何字符串“测试。”
您已经在使用.filter()
来获取字符串数组。如果result
数组为空,则表示没有字符串。 (我假设你不需要我为此显示代码,因为你已经有代码测试数组是否为空。)
答案 1 :(得分:0)
您可以使用 reduce 和初始值(如 null (或任何特定的非字符串值))执行此操作。查找最短的字符串,如果没有字符串, reduce 将返回初始值。因此,如果返回,则返回空字符串。
subString()
这应该比使用 reduce 的过滤器更有效,因为它只会遍历数组一次。