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

时间:2019-01-21 15:51:52

标签: javascript arrays

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

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

我只想显示没有“ undefined”的数字。

谢谢

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] + " ";
    }

}

7 个答案:

答案 0 :(得分:3)

您可以从末尾算起slice的负数。然后join用于格式化输出的元素。

一些链接:

var array = [1, 2, 3, 4, 5, 6, 7, 8];

console.log(array.slice(-4).join(' '));

答案 1 :(得分:2)

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

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

var last4 = Elements.slice(-4)

console.log(last4)

答案 2 :(得分:1)

如果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] + " ";
}

答案 3 :(得分:0)

还有其他方法可以满足您的需求,例如使用.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>

答案 4 :(得分:0)

您要确保i在数组的范围内。 Elements.length - x必须等于或大于0。

就像其他人说的那样,您可以(应该?)使用slice,但是由于您似乎正在练习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] + " ";
    }

}

答案 5 :(得分:0)

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)

答案 6 :(得分:0)

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);

Code Output