如果另一个数组元素长于数组元素,则替换它

时间:2017-05-03 06:17:57

标签: javascript arrays loops

我正在尝试编写一个名称检查器,其中最终输出将输出数组中的所有名称,最后一个stat表示数组中最长名称有多少个字符。这就是我到目前为止所拥有的。它不起作用,虽然我不知道从哪里开始。

var arrNameList = ['John', 'Lenny'];
var arrNameListLonger = [];

function addName() {
    var custname = document.getElementById('custname').value;
    arrNameList.push(custname);
}

function processArray() {
    var i = 0;
    var output = ('Total names in array is: ' + arrNameList.length + '<br />');
    while (i < arrNameList.length) {
        output += (arrNameList[i] + '<br />');
        if (arrNameList[i] > arrNameList[i + 1]) {
            arrNameListLonger[0] = (arrNameList[i]);
            output += ('The longest name in the array is ' + arrNameListLonger[0].length + ' characters');

        }
        document.getElementById('output').innerHTML = output;
        i++;
    }
    return (output);
}

对于比较/指导,这是我的代码的第一阶段(它只输出名称)

var arrNameList = ['John', 'Lenny'];

function addName() {
    var custname = document.getElementById('custname').value;
    arrNameList.push(custname);
}

function processArray() {
    var i = 0;
    var output = ('Total names in array is: ' + arrNameList.length + '<br />');
    while (i < arrNameList.length) {
        output += (arrNameList[i] + '<br />');
        document.getElementById('output').innerHTML = output;
        i++;
    }
    return (output);
}

4 个答案:

答案 0 :(得分:1)

首先,从您的代码中看起来您似乎无法在任何地方调用您的函数,也许您的问题中缺少部分代码。在任何情况下,我都会这样做:

function process_array() {
    let longest = ''
    arrNameList.forEach((name) => {
        if (name.length > longest.length) {
            longest = name
        }
    })

    document.getElementById('output').innerHTML = 'The names are ' + arrNameList.join(', ') + ' and the longest is ' + longest
}

您可以使用。forEach遍历数组,我在该函数中所做的只是替换最长单词的一个值。我使用的另一个技巧join the elements of the array

修改

查找数组中最长元素的更有效方法是使用sorting the array

let longest = arrNameList.sort((a, b) => { 
    return b.length - a.length; 
})[0];

答案 1 :(得分:1)

您实际上将每个名称与数组中的下一个名称进行比较。你甚至不比较字符串的长度。

要获得最长的名称,您需要拥有一个包含此名称的变量。使用空字符串初始化它并将此longestName与数组中的每个名称进行比较。如果它更长,请用当前名称替换变量。

  • 您不必使用()围绕作业的右侧
  • 您可以使用简单的for循环来迭代您的数组。您将有条件停止并且索引在同一行
  • return
  • 中似乎没有processArray()声明

var arrNameList = ['John', 'Lenny'];
var arrNameListLonger = [];

function addName() {
  var custname = document.getElementById('custname').value;
  arrNameList.push(custname);
}

function processArray() {
  var longestName = '';
  var output = 'Total names in array is: ' + arrNameList.length + '<br />';
  for (var i = 0, l = arrNameList.length; i < l; i++) {
    output += arrNameList[i] + '<br/>';
    if(arrNameList[i].length > longestName.length){
      longestName = arrNameList[i];
    }
  }
  output += "The longest name is " + longestName;
  document.getElementById("output").innerHTML = output;
  return output;
}
<input id="custname" />
<button onclick="addName()">Add</button>
<button onclick="processArray()">Process</button>
<div id="output"></div>

以下是使用ES6

的代码的另一个版本

var arrNameList = ['John', 'Lenny'];

function addName() {
  var custname = document.getElementById('custname').value;
  arrNameList.push(custname);
}

function processArray() {
  let output = `Total names in array : ${arrNameList.length}<br/>`;
  let longestName = arrNameList.reduce((a, b) => a.length > b.length ? a : b);
  output += arrNameList.join('<br/>');
  output += `<br/>Longest name is ${longestName}`;
  document.getElementById("output").innerHTML = output;

  return output;
}
<input id="custname" />
<button onclick="addName()">Add</button>
<button onclick="processArray()">Process</button>
<div id="output"></div>

答案 2 :(得分:0)

您可以使用Array.prototype.reduce获取数组中最长的字符串。

这只是返回缩小中最长字符串的长度。

&#13;
&#13;
var arrNameList = ['John', 'Lenny'];

console.log(
  arrNameList.reduce((longest, name) => Math.max(longest, name.length), 0)
)
&#13;
&#13;
&#13;

答案 3 :(得分:-1)

您的代码略有错误,因为您要比较两个字符串而不是比较字符串的长度

替换此代码

var arrNameList = ['John', 'Lenny'];
var arrNameListLonger = [];

function addName() {
    var custname = document.getElementById('custname').value;
    arrNameList.push(custname);
}

function processArray() {
    var i = 0;
    var output = ('Total names in array is: ' + arrNameList.length + '<br />');
    while (i < arrNameList.length) {
        output += (arrNameList[i] + '<br />');
        if (arrNameList[i] > arrNameList[i + 1]) {
            arrNameListLonger[0] = (arrNameList[i]);
            output += ('The longest name in the array is ' + arrNameListLonger[0].length + ' characters');

        }
        document.getElementById('output').innerHTML = output;
        i++;
    }
    return (output);
}

**by**

var arrNameList = ['John', 'Lenny'];
var arrNameListLonger = [];

function processArray() {
    var i = 0;

    var output = ('Total names in array is: ' + arrNameList.length + '<br />');
    while (i < arrNameList.length) {
        output += (arrNameList[i] + '<br />');

    if(i<arrNameList.length-1){
         if (arrNameList[i].length > arrNameList[i + 1].length) {
            arrNameListLonger[0] = (arrNameList[i]);


        }
        else{
             arrNameListLonger[0] = (arrNameList[i+1]);
        }


    }
        i++;
    }
    console.log(arrNameListLonger[0].length);
    return (output);
}