繁体   English   中英

我想打印数组的最后一个 'n' 元素

[英]I want to print the last 'n' elements of an array

我正在编写一个 JavaScript 函数来获取数组的最后一个 'n' 元素。 如果数组有 6 个元素,如果用户给出 4 个元素,则它必须返回最后 4 个元素。 如果用户给出的 'n' 大于数组中的元素数,则它应该返回所有元素。

问题是如果数组有 8 个元素,我给出数字 10。结果是: undefined undefined 1 2 3 4 5 6 7 8

我只想显示没有“未定义”的数字。

谢谢

HTML代码

数组是:

1,2,3,4,5,6,7,8

        <br>
        x:
        <input type="number" id="x" value="2" >
        <br>
        <button onclick="elements()"> Get the elements </button>

        <p id="result"></p>

    <script src="ex10.js"></script>

JavaScript 代码

 var Elements = new Array(1,2,3,4,5,6,7,8);

    function elements(){
    var x = document.getElementById("x").value;

    for(var i=Elements.length - x; i <=Elements.length-1; i++)
    {
    document.getElementById("result").innerHTML += Elements[i] + " ";
    }

}

你可以从最后取负数slice 然后join格式化输出的元素。

一些链接:

 var array = [1, 2, 3, 4, 5, 6, 7, 8]; console.log(array.slice(-4).join(' '));

尝试使用带有负起始索引的.slice方法:

 var Elements = new Array(1,2,3,4,5,6,7,8); var last4 = Elements.slice(-4) console.log(last4)

如果 x 大于数组的大小,您可以将 x 重新分配为数组的长度。 现在您最多将打印整个数组并至少打印 x。

var x = document.getElementById("x").value;

if(x > Elements.length)  // add this
    x = Elements.length;

for(var i=Elements.length - x; i <=Elements.length-1; i++)
{
    document.getElementById("result").innerHTML += Elements[i] + " ";
}

还有其他方法可以实现您的需求,例如使用.slice().map()等。

如果您需要坚持使用for循环,那么Math.min()可以派上用场:

 const arr = [1, 2, 3, 4, 5, 6, 7, 8]; const elX = document.getElementById("x"); const elR = document.getElementById("result"); function elements() { const x = parseInt(elX.value, 10); // use parseInt with radix! const min = Math.min(arr.length, x); let html = ""; for (var i = arr.length - min; i <= arr.length - 1; i++) { html += arr[i] + " "; } elR.innerHTML = html; // Insert into DOM only once! }
 x: <input type="number" id="x" value="2"> <button onclick="elements()">Get the last N elements</button> <p id="result"></p>

这是使用.slice().map()的示例

 const arr = [1, 2, 3, 4, 5, 6, 7, 8]; const elX = document.getElementById("x"); const elR = document.getElementById("result"); function elements() { const x = parseInt(elX.value, 10); elR.innerHTML = arr.slice(-x).map(n => `Item:${n}`).join('<br>'); }
 x: <input type="number" id="x" value="2"> <button onclick="elements()">Get the last N elements</button> <p id="result"></p>

你想确保i在数组的范围内。 Elements.length - x需要等于或大于 0。

就像其他人说的那样,您可以(应该?)使用切片,但由于您似乎正在练习 for 循环,因此您最好坚持使用它。

var Elements = new Array(1,2,3,4,5,6,7,8);

function elements(){
    var x = document.getElementById("x").value;

    for(var i=Math.max(Elements.length - x, 0); i <=Elements.length-1; i++)
    {
        document.getElementById("result").innerHTML += Elements[i] + " ";
    }

}

 const count = 5; var Elements = new Array(1,2,3,4,5,6,7,8); var result = Elements.slice(count > Elements.length ? 0 : Elements.length - count,Elements.length) console.log(result)

const drivers = ['Sally', 'Bob', 'Freddy', 'Claudia'];

  function returnFirstTwoDrivers(drivers) {
  return drivers.slice(0,2) 
  }

    function returnLastTwoDrivers(drivers) {
    return drivers.slice(-2)
  }
  

document.getElementById("mocha").innerHTML = 'ARRAY 1: ' + returnFirstTwoDrivers(drivers) + '<br/>ARRAY 2: ' + returnLastTwoDrivers(drivers);

代码输出

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM