我正在尝试将输入中的数组展平,并返回最长的字符串。
例如给定输入:
i = ['big',[0,1,2,3,4],'tiny']
该函数应返回'tiny'。我想使用 reduce或 concat以原生和优雅的方式解决这个问题(没有实现 flatten prototype in array )但我失败了这段代码:
function longestStr(i)
{
// It will be an array like (['big',[0,1,2,3,4],'tiny'])
// and the function should return the longest string in the array
// This should flatten an array of arrays
var r = i.reduce(function(a, b)
{
return a.concat(b);
});
// This should fetch the longest in the flattened array
return r.reduce(function (a, b)
{
return a.length > b.length ? a : b;
});
}
最佳答案
您的问题是您忘记将 initialValue
参数传递给 reduce函数,在本例中它必须是一个数组。
var r = i.reduce(function(a, b) {
return a.concat(b);
}, []);
如果不提供initialValue
,第一次调用的a
值将是i
数组中的第一个元素,即字符串大 在你的情况下,所以你将调用 String.prototype.concat
函数而不是 Array.prototype.concat
。
这意味着最后,r
是一个字符串,并且字符串没有reduce
函数。
但是您的解决方案可以简化:
['big',[0,1,2,3],'tiny'].reduce(function longest(a, b) {
b = Array.isArray(b)? b.reduce(longest, '') : b;
return b.length > a.length? b : a;
}, '');
关于javascript - 在javascript中展平数组以获得最长的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19171446/