我正在编写一个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] + " ";
}
}
答案 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);