【问题标题】:Using .push() to add multiple items into an array, but only having one added - JavaScript使用 .push() 将多个项目添加到数组中,但只添加一个 - JavaScript
【发布时间】:2017-06-01 00:21:28
【问题描述】:

我是 JavaScript 新手,100% 通过基于互联网的免费资源自学。 (只是一个介绍,以防我的问题是一个愚蠢的错误)

问题:

给定一个字符串数组,返回另一个包含所有最长字符串的数组。

例子

对于 inputArray = ["aba", "aa", "ad", "vcd", "aba"],输出应该是 allLongestStrings(inputArray) = ["aba", "vcd", "aba"].

我的代码:

function allLongestStrings(inputArray) {
    var longest = inputArray.reduce(function (a, b) { 
        return a.length > b.length ? a : b; 
    });
    for(var i = 0; i < inputArray.length; i++) {
        if(inputArray[i].length === longest.length) {
            var longArray = [];
            longArray.push(inputArray[i]);
        }
        return longArray;
    }
}

错误:

输入:
输入数组:[“aba”, “啊”, “广告”, "光盘", "aba"]

输出: ["aba"]

预期输出: [“阿巴”, "光盘", "aba"]

输入: 输入数组:[“abc”, “哎呀”, “A B C D”, "dcd"]

输出:

预期输出: [“eeee”, "abcd"]

【问题讨论】:

  • longArray 应该在循环外声明,否则每次迭代都会重置
  • @AndrewLi 谢谢!我将它移到循环内,但仍然只有一个输出。虽然,第二个错误确实改变了:输入:inputArray:[“abc”,“eeee”,“abcd”,“dcd”]输出:[“eeee”]预期输出:[“eeee”,“abcd”]
  • 你也在 for 循环体内部返回。它应该被移到函数声明的底部。
  • 总结:声明var longArray = []; before for 语句,和return longArray after for 循环的右大括号} .
  • @StephenP 嗯,我试过了,第一个错误保持不变,但第二个错误现在显示: Input: inputArray: ["abc", "eeee", "abcd", "dcd" ] 输出:[] 预期输出:["eeee", "abcd"]

标签: javascript arrays


【解决方案1】:

进行 cmets 中描述的更改给了我:

function allLongestStrings(inputArray) {
    var longest = inputArray.reduce(function (a, b) { 
        return a.length > b.length ? a : b; 
    });
    var longArray = []; 
    for (var i = 0; i < inputArray.length; i++) {
        if (inputArray[i].length === longest.length) {
            longArray.push(inputArray[i]);
        }
    }
    return longArray;
}

在我的浏览器控制台(Chrome)中,声明函数后,我做

var inp1 = ["aba", "aa", "ad", "vcd", "aba"];
var inp2 = ["abc", "eeee", "abcd", "dcd"];
//
allLongestStrings(inp1)
allLongestStrings(inp2)

我得到了你列出的这两种情况的预期输出:

allLongestStrings(inp1)
(3) ["aba", "vcd", "aba"]
allLongestStrings(inp2)
(2) ["eeee", "abcd"]

【讨论】:

  • 啊!抱歉,我错误地将其仅向下移动了一个支架,而不是两个。我复制了您的代码,然后将其粘贴到我的下方并进行了比较,这就是发生的事情。顺便说一句,它奏效了!非常感谢您的帮助!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-19
  • 2020-05-02
  • 1970-01-01
  • 2018-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多