数组中的单个字符串长度 javascript

individual string length in array javascript

我需要创建一个接受四个字符串和 returns 包含每个字符串长度的数组的函数。我得到了这个:

function stringLengths(str1, str2, str3, str4) {
  //
}

我创建了一个字符串数组,并且搜索了 google 这么久,所有的词都开始看起来一样了。

您可以使用 Rest Paremeters 将参数转换为数组,然后 map 它们以获得您需要的结果。以下是我的片段。

function stringLengths(...strings){
  return strings.map(string => string.length);
}
console.log(stringLengths("","something","something else"))

这是您的代码

function stringLengths(str1, str2, str3, str4) { 
  return [str1.length, str2.length, str3.length, str4.length]
}

console.log(stringLengths('1','bb','ccc','dddd'))

您可以使用 rest 语法和 .map() 函数来获取字符串长度的数组:

const stringLengths = (...str) => str.map(({ length }) => length);

console.log(stringLengths('lorem', 'ipsum'));
console.log(stringLengths('lorem', 'ipsum', 'sit', 'amet'));

如果你不想改变你的函数定义,你也可以使用arguments对象。

function stringLengths(str1, str2, str3, str4)
{    
    return [...arguments].map(x => x.length);
}

console.log(stringLengths("hello", "cruel", "world", "of", "darkness"));

或者像这样:

function stringLengths(str1, str2, str3, str4)
{    
    return Object.values(arguments).map(x => x.length);
}

console.log(stringLengths("hello", "cruel", "world", "of", "darkness"));

已经有很好的答案可以使 stringLengths 使用任意数量的参数。然而,所有(到目前为止)都假设每个参数都是一个字符串。

这可能会导致意外结果:

  • 数组和函数都有一个length属性
  • 任何物品都可以用 length 属性
  • 制作

甚至错误:

  • nullundefined 这样的东西在尝试从它们读取属性时会抛出错误。

const stringLengths = (...strs) =>
  strs.map(s => s.length);

console.log(
  stringLengths(1, 2)
);

console.log(
  stringLengths({length: ''}, [''], (a, b) => '')
);

console.log(
  stringLengths(null, null)
);

您可以编写一个装饰器 filterStrings,您可以将其应用于 stringLengths,以便它只获取字符串:

const stringLengths = (...strs) =>
  strs.map(s => s.length);

const filterStrings = fn => (...args) =>
  fn(...args.filter(arg => typeof arg === 'string'));
  
const safeStringLengths = filterStrings(stringLengths);

console.log(
  safeStringLengths(1, 2)
);

console.log(
  safeStringLengths({length: ''}, [''], (a, b) => '')
);

console.log(
  safeStringLengths(null, null)
);

console.log(
  safeStringLengths("foo", "bar", "foobar")
);

filterStrings 是实际获取所有参数的函数,它只保留字符串并将它们传递给 stringLengths.

为什么要这样做?

这真的取决于你的上下文。装饰器的好处在于它允许您将参数验证移到 stringLengths 之外,让函数只做一件事。

在某些情况下,您可以简单地信任您的参数,而在您的函数中进行验证是没有用的。在其他情况下,您不能。能够组合功能使您能够将事物分开并组织起来。