数组javascript

时间:2019-02-04 05:09:09

标签: javascript arrays string string-length

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

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

我创建了一个字符串数组,并且在google中搜索了很长时间,所有单词开始看起来都一样。

5 个答案:

答案 0 :(得分:5)

您可以使用Rest Paremeters将参数转换为数组,然后使用map将其转换为所需的结果。下面是我的代码段。

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

如果您不想更改函数定义,也可以使用arguments对象。

baz

或者这样:

qux

答案 3 :(得分:0)

已经有了出色的答案,可以使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之外,并让函数只做一件事。

在某些情况下,您可以简单地信任您的参数,而在函数中进行验证将毫无用处。在其他情况下,您不能这样做。能够组合功能使您可以使事情分开并井井有条。

答案 4 :(得分:-2)

这是您的代码

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

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