如何判断混合数组是否包含字符串元素?

时间:2017-03-19 05:50:16

标签: javascript arrays string

练习问题我正在努力:

  

编写一个名为“findShortestWordAmongMixedElements”的函数。

     

给定arrayfindShortestWordAmongMixedElements返回给定数组中的最短字符串。

     

注意:
  *如果有联系,它应该返回第一个出现在给定数组中的元素   *期望给定数组具有除字符串之外的值   *如果给定数组为空,则应返回空字符串    *如果给定的数组不包含字符串,则应返回空字符串。

目前我编码的是:

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,但我不确定该怎么做。

任何提示?甚至更聪明的方式来编写这个功能

2 个答案:

答案 0 :(得分:4)

  

“一切正常,但我无法弄清楚如何传递”如果给定的数组不包含任何字符串“测试。”

您已经在使用.filter()来获取字符串数组。如果result数组为空,则表示没有字符串。 (我假设你不需要我为此显示代码,因为你已经有代码测试数组是否为空。)

答案 1 :(得分:0)

您可以使用 reduce 和初始值(如 null (或任何特定的非字符串值))执行此操作。查找最短的字符串,如果没有字符串, reduce 将返回初始值。因此,如果返回,则返回空字符串。

subString()

这应该比使用 reduce 过滤器更有效,因为它只会遍历数组一次。