我正在创建一个返回给定数组中最短字符串的函数。 如果存在tie,则应返回第一个元素以显示在给定数组中。期望给定数组具有除字符串之外的值。如果给定数组为空,则应返回空字符串。如果给定的数组不包含任何字符串,则应该返回一个空字符串。
这是我的代码:
function findShortestWordAmongMixedElements(arr) {
if(arr.length === 0 && arr.indexof(arr)){
return '';
} else{
return arr.reduce(function(a, b) {
return a.length >= b.length ? a : b;
})
}
}
var output = findShortestWordAmongMixedElements([4, 'two', 2, 'three']);
console.log(output); // --> 'two'
而不是两个,它返回三个。另外arr.indexof(arr)
检查数组是否有一些字符串。
答案 0 :(得分:1)
这应该涵盖您的要求:
let array = [4, 'two', 2, 'three'];
let shortest = array.filter(v => typeof v === 'string')
.reduce((a, v) => a && a.length <= v.length ? a : v, '');
console.log(shortest);
答案 1 :(得分:0)
试试这个(重要的部分当然是reduce
):
var arr = ["a", 1, "ab", "ac", 4, "ade", "ac" ] ;
var short = arr.filter( (e)=> typeof e == 'string' ).reduce( (res, elem, index)=>{
if(res==undefined || res.length>elem.length)
res = elem;
return res;
}, undefined );
alert(short)
它的作用如下: 它过滤数组只保留字符串,如果res未定义或者res的长度大于元素的长度,那么我们将元素存储在res中。
因此,适应您的问题:
function findShortestWordAmongMixedElements(arr) {
if(arr.length === 0 && arr.indexof(arr)){
return undefined;
} else {
return arr.filter( (e)=> typeof e == 'string' ).reduce( (res, elem, index)=>{
if(res==undefined || res.length>elem.length)
res = elem;
return res;
}, undefined );
}
}
注意:如果数组中没有字符串,我决定返回undefined,因为它有点意义(如果你真的想要一个字符串作为结果,你仍然可以使用空字符串进行解决方法)
答案 2 :(得分:-1)
function findShortestWordAmongMixedElements(arr) {
if(arr.length === 0 && arr.indexof(arr)){
return '';
} else{
return arr.reduce(function(a, b) {
return a.length >= toString(b).length ? toString(b) : a;
},"");
}
}
var output = findShortestWordAmongMixedElements([4, 'two', 2, 'three']);
console.log(output);