数组中的单个字符串长度 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
属性 制作
甚至错误:
- 像
null
或 undefined
这样的东西在尝试从它们读取属性时会抛出错误。
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
之外,让函数只做一件事。
在某些情况下,您可以简单地信任您的参数,而在您的函数中进行验证是没有用的。在其他情况下,您不能。能够组合功能使您能够将事物分开并组织起来。
我需要创建一个接受四个字符串和 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
属性 制作
甚至错误:
- 像
null
或undefined
这样的东西在尝试从它们读取属性时会抛出错误。
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
之外,让函数只做一件事。
在某些情况下,您可以简单地信任您的参数,而在您的函数中进行验证是没有用的。在其他情况下,您不能。能够组合功能使您能够将事物分开并组织起来。