在javascript中展平数组以获得最长的字符串
Flatten an array of arrays in javascript for get the longest string
我正在尝试在输入中展平数组数组,并返回最长的字符串。
例如,给定输入:
i = ['big',[0,1,2,3,4],'tiny']
该函数应返回"微小"。我想使用 reduce 或 concat 以本机和优雅的方式解决此问题(无需在数组中实现扁平化原型),但我在这段代码中失败了:
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;
}, '');
你没有提到有多个长度相同的字符串-或者如果你关心IE8...
function longestStr(A){
var i= 0, len, A= String(A).split(/'b/).sort(function(a, b){
return a.length<b.length;
});
len= A[0].length;
while(A[i].length==len)++i;
return A.slice(0, i);
}
var A1= ['big', [0, 1, 2, 3, 4], 'tiny',[1,2,3,'puny']];
longestStr(A1);
/* returned value: (Array)
tiny,puny
*/
方法2:
您没有将字符串定义为单个单词-
任何数组分量仪都可以包含在任何值中,使我的解决方案不正确。
展平数组使比较每个项目的长度变得简单 -
它不必作为原型方法完成:
function longestStr(array){
function flatten(arr){
var A1= [], L= arr.length, next;
for(var i= 0; i<L; i++){
next= arr[i];
if(next.constructor!= Array) A1.push(String(next));
else A1= A1.concat(flatten(next));
}
return A1;
}
var i= 0, len, A=flatten(array);
A.sort(function(a, b){
return a.length<b.length;
});
len= A[0].length;
while(A[i].length== len)++i;
return A.slice(0, i);
}
var Ax= ['big stuff', [0, 1, 2, 3, 4], 'tiny', [1, 2, 3, 'puny']];
longestStr(Ax);
/* returned value: (Array)
big stuff
*/
相关文章:
- 将DOM节点值与字符串Javascript进行比较
- 到UpperCase字符串Javascript中的特定字符索引
- 替换字符串javascript中的所有特殊字符..
- 在数组中查找某些字符串(Javascript)
- 解析特定的字符串Javascript(Node.js)
- 从字符串 JavaScript 中过滤多个正则表达式
- 在字符串 JavaScript 中使用正则表达式替换
- 忽略字符串javascript中的字符
- 如何检查url是否包含多个字符串.Javascript/jquery
- 截断字符串JavaScript
- 计算字符串javascript中的某些单词
- 从'获取本月的最后一天;2015-02-23'字符串(javascript)
- 从字符串javascript中获取键值对
- 从路径字符串 - Javascript 获取所有父路径
- 在字符串Javascript中查找丢失的字母
- AngularJS:如何使所有ng模型都是字符串.JavaScript和长整数
- 将浮点转换为至少有一个小数点的字符串(javascript)
- 替换字符串 JavaScript 中的多个文本
- 检查另一个字符串 JavaScript 中一个字符串是否有任何字符的最佳方法
- 将变量的值包含在 href 字符串 javascript 中