确定数组中的某个元素是否为字符串

时间:2016-10-27 04:07:29

标签: javascript arrays string element typeof

给定一个混合类型数组,“getLongestWordOfMixedElements”返回给定数组中最长的字符串。

注意:

  • 如果数组为空,则应返回空字符串("")。
  • 如果数组不包含字符串;它应该返回一个空字符串。

如何确定数组是否包含字符串,如下代码所示:

function getLongestWordOfMixedElements(arr) {

    if (arr.length === 0) return ""
    var max = 0
    for (var i = 0; i < arr.length; i++){
        if(arr[i].length > max) max = arr[i]
    }
    return max
}

getLongestWordOfMixedElements([3, 'word', 5, 'up', 3, 1]);

3 个答案:

答案 0 :(得分:4)

您可以过滤数组中的字符串,然后使用 reduce 操作找到最长的

function getLongestWordOfMixedElements(arr) {
  return arr
    .filter(item => typeof item === 'string')
    .reduce((longest, str) => str.length > longest.length ? str : longest, '');
}

console.log(getLongestWordOfMixedElements([3, 'word', 5, 'up', 3, 1]));

请注意,如果任何单词的长度相同,则返回数组中较早的单词。

此外,您可以跳过过滤器并在 reduce 中进行类型检查...

return arr.reduce((longest, str) => {
  return typeof str === 'string' && str.length > longest.length ?
    str : longest;
}, '')

答案 1 :(得分:0)

迭代元素并检查其类型是否为字符串。 您可以使用typeof完成此操作。

让我们假设您将拥有大量数据,并且不希望将内存使用量增加一倍/或者为了代码中的示例:

function getLongestWordOfMixedElements(arr) {
    var max = "";

    if (arr.length) {
        arr.forEach(function (item) {
            if (typeof item === "string" && item.length > max) {
                max = item;
            }
        });
    }

    return max;
}


console.log(getLongestWordOfMixedElements([3, 'word', 5, 'up', 3, 1, {foo:4}]));

在您的代码中,您可以通过以下方式进行更改:

for (var i = 0; i < arr.length; i++) {
    var item = arr[i];

    if (typeof item === "string" && item.length > max) {
        max = arr[i];
    }
}

答案 2 :(得分:0)

这是我的版本......

function getLongestWordOfMixedElements(arr) {
  let result = '';

  if (arr.length) {
    for(i in arr) {
      const value = arr[i];

      if (value && typeof value === 'string' && value.length > result.length) {
        result = value;
      }
    }
  }

  return result;
}


getLongestWordOfMixedElements([333333, 'word', 5, 'up', 3, 1]);