所以我试图在字符串数组中找到最长的字符串。在我必须返回最长字符串的长度之前,我已经完成了与此类似的问题。问题是,我的代码工作并返回11,如下所示:
var long1= 0;
var plorp = ["bbllkw", "oox", "ejjuyyy", "plmiis", "xxxzgpsssa", "xxwwkktt", "znnnnfqknaz", "qqquuhii", "dvvvwz"];
function longestString(arr){
for (i=0; i<arr.length; i++){
if (arr[i].length > long1){
long1= arr[i].length;
}
}
return long1;
}
但是,如果我将long1= arr[i].length;
更改为long1 = arr[i];
,则只返回arr[0]
。我在这里错过了什么吗?否则循环似乎正在迭代。
编辑:也就是说,它返回bbllkw
。
答案 0 :(得分:8)
您可以改为使用class FotoDelete(LoginRequiredMixin, DeleteView):
model = Foto
def get_success_url(self):
fotoid = self.kwargs['pk']
foto = get_object_or_404(Foto, id=fotoid)
album_id = foto.albumnr.pk
return reverse_lazy('albumbum:detail', kwargs={'pk': album_id})
:
reduce
&#13;
或ES6版本:
var plorp = ["bbllkw", "oox", "ejjuyyy", "plmiis", "xxxzgpsssa", "xxwwkktt", "znnnnfqknaz", "qqquuhii", "dvvvwz"];
var longest = plorp.reduce(function(a, b) {
return a.length > b.length ? a : b
}, '');
console.log(longest);
&#13;
答案 1 :(得分:3)
您必须将长声明更改为:
var long1= '';
并且在for循环条件中它应该是
arr[i].length > long1.length
答案 2 :(得分:2)
在用户需要更基本的解决方案后更新
在这里,我们找到具有reduce
函数的数组项的最长长度,然后使用具有filter
函数的长度的元素过滤数组。如果它们具有相同但长度最长的
var plorp = ['sameLength', 'someoth', 'asfzc', 'sameLLngth'];
ln = plorp.reduce((r,s) => r > s.length ? r : s.length, 0);
const result = plorp.filter(pl => pl.length == ln);
console.log(result);
旧答案
如果数组中有 多个 最长的字符串,它将返回一个数组。如果只有一个最长,它将返回字符串,而不是数组。
var plorp = ["bbllkw", "oox", "ejjuyyy", "plmiis", "xxxzgpsssa", "xxwwkktt", "znnnnfqknaz", "qqquuhii", "dvvvwz"];
var wholeArr = [];
function longestString(arr) {
var tlength = 0;
for(var i =0; i < plorp.length; i++){
if(tlength < plorp[i].length){
tlength = plorp[i].length;
}
}
for(var j =0; j < plorp.length; j++){
if(plorp[j].length == tlength){
wholeArr.push(plorp[j]);
}
}
if(wholeArr.length == 1){
return wholeArr[0]
}else{
return wholeArr
}
}
console.log(longestString(plorp));
答案 3 :(得分:1)
var arr = [“first”,“second”,“third”,“fourth”,“thousand”]
function getLongestString(arr) { let longestStringArr = arr.sort((a,b)=&gt; a.length - b.length).reverse(); return longestStringArr [0]; }
console.log(getLongestString(arr))
答案 4 :(得分:0)
只需比较字符串的长度,然后将字符串本身分配给long1。
var plorp = ["bbllkw", "oox", "ejjuyyy", "plmiis", "xxxzgpsssa", "xxwwkktt", "znnnnfqknaz", "qqquuhii", "dvvvwz"];
function longestString(arr) {
var long1 = arr[0];
for (i = 0; i < arr.length; i++) {
if (arr[i].length > long1.length) {
long1 = arr[i];
}
}
return long1;
}
console.log(longestString(plorp));
答案 5 :(得分:0)
问题在于您设置
long1=arr[i];
并与长度进行比较,即整数值。
在第一次迭代时,您将0的整数值与第一个字符串的长度进行比较,这当然使得比较表达式结果为true并且您设置了
long1=arr[0];
对于下一次迭代,long1
不再包含整数值而是字符串,因此长度与long1
之间的比较始终返回false。
这就是为什么你总是得到第一个字符串作为结果。
您需要将long1
初始化为空字符串,然后根据belhadj的回答建议使用long1.length
进行比较。
答案 6 :(得分:0)
另一种解决方案涉及阵列的sort方法和比较功能,但这可能是一个重的&#34;根据{{3}}的解决方案:
根据compareFunction的性质,这可能会产生很高的影响 高架。 compareFunction做的工作越多,元素就越多 有分类,可以考虑使用地图更明智 排序
因此,采用上述建议,这是使用地图和数组排序方法获取最长字符串的一种方法,如下所示:
var plorp = ["bbllkw", "oox", "ejjuyyy", "plmiis",
"xxxzgpsssa", "xxwwkktt", "znnnnfqknaz",
"qqquuhii", "dvvvwz"];
function getLongestStr() {
var mapped = plorp.map((el, i) => ({ index: i, length: el }) );
mapped.sort((a, b) => {
if (a.length > b.length) {
return -1;
}
if (a.length < b.length) {
return 1;
}
return 0;
});
// DESC order so longest string in 0th element
return mapped.map((el) => plorp[el.index])[0];
}
console.log( getLongestStr() );
&#13;
有趣的相关讨论MDN。