javascript - 在javascript中展平数组以获得最长的字符串

标签 javascript arrays list reduce flatten

我正在尝试将输入中的数组展平,并返回最长的字符串。

例如给定输入:

i = ['big',[0,1,2,3,4],'tiny'] 

该函数应返回'tiny'。我想使用 reduceconcat以原生和优雅的方式解决这个问题(没有实现 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/

相关文章:

javascript - 无法更新表单中的值并发送到下一个 jsp 页面

javascript - 如何生成 1 到 100 万之间的随机数?

android - 如何从json对象中获取json数组?

c# - List<int> 需要很长时间才能使用 Nhibernate Criteria 进行实例化

javascript - Javascript 中的 onkeypress + onblur

javascript - 如何在网站中运行 TypeScript 编译器

c++ - 十进制转二进制输出

arrays - 如何快速将字典分配给 AnyObject

python - 合并成对列表(元组)?

python - 类型错误 : unhashable type: 'list' when dynamically creating 'variables'