获取数组中的最后一项
这是我的JavaScript代码到目前为止:
var linkElement = document.getElementById("BackButton"); var loc_array = document.location.href.split('/'); var newT = document.createTextNode(unescape(capWords(loc_array[loc_array.length-2]))); linkElement.appendChild(newT); 目前,它从URL中获取数组中的倒数第二项。 不过,我想检查数组中的最后一个项目是“index.html”,如果是这样,抓住倒数第三个项目。
 if(loc_array[loc_array.length-1] == 'index.html'){ //do something }else{ //something else. } 
 如果您的服务器为“index.html”和“inDEX.htML”提供相同的文件,则还可以使用: .toLowerCase() 。 
尽pipe如此,如果可能的话,你可能会考虑做这个服务器端:它会更清洁,并为没有JS的人工作。
不确定是否有缺点,但这似乎相当简洁:
 arr.slice(-1)[0] 
要么
 arr.slice(-1).pop() 
 如果数组为空,两者都将返回undefined 。 
使用Array.pop :
 var lastItem = anArray.pop(); 
重要提示 :这将返回最后一个元素并将其从数组中移除
@chaiguy发布的简短版本:
 Array.prototype.last = function() { return this[this.length-1]; } 
 读取-1索引返回undefined 。 
两个选项是:
 var last = arr[arr.length - 1] 
要么
 var last = arr.slice(-1)[0] 
前者更快,但后者看起来更好
以下是如何获得它对原始arrays没有影响
 a = [1,2,5,6,1,874,98,"abc"]; a.length; //returns 8 elements 
如果你使用pop(),它会修改你的数组
 a.pop(); // will return "abc" AND REMOVES IT from the array a.length; // returns 7 
但是你可以使用它,所以它对原始数组没有影响 :
 a.slice(-1).pop(); // will return "abc" won't do modify the array // because slice creates a new array object a.length; // returns 8; no modification and you've got you last element 
 我宁愿使用array.pop()比索引。 
 while(loc_array.pop()!= "index.html"){ } var newT = document.createTextNode(unescape(capWords(loc_array[loc_array.length]))); 
这样你总是得到index.html之前的元素(提供你的数组有独立的index.html作为一个项目)。 注意:尽pipe如此,你将失去数组中的最后一个元素。
获取数组的最后一项可以通过使用具有负值的slice方法来实现。
你可以在这里阅读更多关于它的底部。
 var fileName = loc_array.slice(-1)[0]; if(fileName.toLowerCase() == "index.html") { //your code... } 
使用pop()会改变你的数组,这并不总是一个好主意。
“最干净”的ES6方式(IMO)将是:
 const foo = [1,2,3,4]; const bar = [...foo].pop(); 
 这避免了突变foo,因为我们不使用扩散运算符就会popup。 这就是说,我更喜欢foo.slice(-1)[0]解决scheme。 
jQuery很好地解决了这个问题:
 > $([1,2,3]).get(-1) 3 > $([]).get(-1) undefined 
我通常使用underscorejs ,你可以做
 if (_.last(loc_array) === 'index.html'){ etc... } 
 对我来说,这比loc_array.slice(-1)[0] 
对于那些不怕重载数组原型(并且不应该使用枚举掩码 ):
 Object.defineProperty( Array.prototype, "getLast", { enumerable: false, configurable: false, writable: false, value: function() { return this[ this.length - 1 ]; } } ); 
 如果想一次性得到最后一个元素,他/她可以使用Array#splice() : 
 lastElement = document.location.href.split('/').splice(-1,1); 
这里,不需要将拆分元素存储在数组中,然后到达最后一个元素。 如果得到最后一个元素是唯一的目标,应该使用这个。
 注意: 这将通过删除最后一个元素来更改原始数组 。 把splice(-1,1)想象成一个pop()最后一个元素的pop()函数。 
我个人会通过kuporific / kritzikratzi upvote回答。 如果使用嵌套数组,数组[array.length-1]方法会变得非常难看。
var array = [[1,2,3], [4,5,6], [7,8,9]] array.slice(-1)[0] //instead of array[array.length-1] //Much easier to read with nested arrays array.slice(-1)[0].slice(-1)[0] //instead of array[array.length-1][array[array.length-1].length-1]var array = [[1,2,3], [4,5,6], [7,8,9]] array.slice(-1)[0] //instead of array[array.length-1] //Much easier to read with nested arrays array.slice(-1)[0].slice(-1)[0] //instead of array[array.length-1][array[array.length-1].length-1]var array = [[1,2,3], [4,5,6], [7,8,9]] array.slice(-1)[0] //instead of array[array.length-1] //Much easier to read with nested arrays array.slice(-1)[0].slice(-1)[0] //instead of array[array.length-1][array[array.length-1].length-1]var array = [[1,2,3], [4,5,6], [7,8,9]] array.slice(-1)[0] //instead of array[array.length-1] //Much easier to read with nested arrays array.slice(-1)[0].slice(-1)[0] //instead of array[array.length-1][array[array.length-1].length-1]var array = [[1,2,3], [4,5,6], [7,8,9]] array.slice(-1)[0] //instead of array[array.length-1] //Much easier to read with nested arrays array.slice(-1)[0].slice(-1)[0] //instead of array[array.length-1][array[array.length-1].length-1]var array = [[1,2,3], [4,5,6], [7,8,9]] array.slice(-1)[0] //instead of array[array.length-1] //Much easier to read with nested arrays array.slice(-1)[0].slice(-1)[0] //instead of array[array.length-1][array[array.length-1].length-1]var array = [[1,2,3], [4,5,6], [7,8,9]] array.slice(-1)[0] //instead of array[array.length-1] //Much easier to read with nested arrays array.slice(-1)[0].slice(-1)[0] //instead of array[array.length-1][array[array.length-1].length-1]var array = [[1,2,3], [4,5,6], [7,8,9]] array.slice(-1)[0] //instead of array[array.length-1] //Much easier to read with nested arrays array.slice(-1)[0].slice(-1)[0] //instead of array[array.length-1][array[array.length-1].length-1]
 var lastElement = arr[arr.length - 1]; 
从性能angular度来看,这是最好的select(约比arr.slice(-1)快1000倍)。
我认为最简单和超低效的方法是:
 var array = ['fenerbahce','arsenal','milan']; var reversed_array = array.reverse(); //inverts array [milan,arsenal,fenerbahce] console.log(reversed_array[0]) // result is "milan". 
 您可以添加一个新的属性getter到Array的原型,以便通过Array所有实例都可以访问它。 
  Getters允许你访问函数的返回值,就像它是一个属性的值一样。 函数的返回值当然是数组的最后一个值( this[this.length - 1] )。 
 最后你把它包装成一个条件,检查last属性是否仍然是undefined (未由另一个可能依赖它的脚本定义)。 
 if(typeof Array.prototype.last === 'undefined') { Object.defineProperty(Array.prototype, 'last', { get : function() { return this[this.length - 1]; } }); } // Now you can access it like [1, 2, 3].last; // => 3 // or var test = [50, 1000]; alert(test.last); // Says '1000' 
在IE≤8时不起作用。
你可以使用这种模式…
 let [last] = arr.slice(-1); 
虽然它读起来很好,但请记住它会创build一个新的arrays,所以它的效率比其他解决scheme低,但几乎不会成为应用程序的性能瓶颈。
 你可以添加一个last()函数给Array原型。 
 Array.prototype.last = function () { return this[this.length - 1]; }; 
使用ES6 / ES2015扩展运算符(…)可以执行以下操作。
 const data = [1, 2, 3, 4] const [last] = [...data].reverse() console.log(last) 
我会build议创build帮助函数,并且每次重用它,你都需要它。 让函数更通用,不仅可以得到最后一个项目,而且还可以得到最后一个项目等等。
 function last(arr, i) { var i = i || 0; return arr[arr.length - (1 + i)]; } 
用法很简单
 var arr = [1,2,3,4,5]; last(arr); //5 last(arr, 1); //4 last(arr, 9); //undefined 
现在,让我们解决原来的问题
抓住倒数第二个表单数组。 如果loc_array中的最后一项是“index.html”,则取而代之的是倒数第三项。
下一行完成这项工作
 last(loc_array, last(loc_array) === 'index.html' ? 2 : 1); 
所以,你需要重写
 var newT = document.createTextNode(unescape(capWords(loc_array[loc_array.length-2]))); 
通过这种方式
 var newT = document.createTextNode(unescape(capWords(last(loc_array, last(loc_array) === 'index.html' ? 2 : 1)))); 
或者使用额外的variables来提高可读性
 var nodeName = last(loc_array, last(loc_array) === 'index.html' ? 2 : 1); var newT = document.createTextNode(unescape(capWords(nodeName))); 
这会工作吗?
 if (loc_array.pop() == "index.html"){ var newT = document.createTextNode(unescape(capWords(loc_array[loc_array.length-3]))); } else{ var newT = document.createTextNode(unescape(capWords(loc_array[loc_array.length-2]))); } 
您也可以在不从URL中提取数组的情况下实现此问题
这是我的select
 var hasIndex = (document.location.href.search('index.html') === -1) ? doSomething() : doSomethingElse(); 
!问候
使用reduceRight :
 [3,2,1,5].reduceRight((a,v) => { return a?a:v; }); 
 还有一个npm模块, last添加到Array.prototype 
 npm install array-prototype-last --save 
用法
 require('array-prototype-last'); [1, 2, 3].last; //=> 3 [].last; //=> undefined 
箭头函数使得执行速度最快的方法更加简洁,不需要重复数组的名称。
 var lastItem = (a => a[a.length - 1])(loc_array); 
使用lodash _.last(array)获取数组的最后一个元素。
 data = [1,2,3] last = _.last(data) console.log(last) 
 <script src="ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>