删除第一个和最后一个对象的更有效方法

时间:2015-10-16 20:51:06

标签: javascript jquery arrays

我目前在下面有以下代码。这样做很好,但我认为有一种更有效的方法来做“移位”和“弹出”,而不是一个接一个地做。仍然了解它是如何工作的,所以任何提示/技巧/推荐都将不胜感激

我循环遍历每个列表项,获取值,然后将其添加到数组中。一旦我拥有它们,如下所示,我删除了第一个和最后一个值,因为这些值只是第一个和最后一个之间的点(如果有的话)

var waypts = [];
var inputArray = $('#enter-destinations li').each(function () {
    var thisAddress = $(this).find('input').val();
    waypts.push({ location : thisAddress, stopover: true });
});

waypts.shift(); //remove first
waypts.pop(); //remove last
console.log(waypts); //show values that were between first and last

4 个答案:

答案 0 :(得分:2)

使用array#slice

waypts = waypts.slice(1, waypts.length - 1)

答案 1 :(得分:2)

在循环遍历数组时跳过第一个和最后一个元素:

import numpy as np
a=[]
b=[]

for i in range(0,100): #alternating list of ints and nan
    if i/2. == i/2:
        a.append(i)
    else: 
        a.append(np.mean([])) #the only way I know how to make nan
    b.append(i*100)

atemp=a
print(len(a),len(atemp))
for i,v in enumerate(atemp):
    if np.isnan(v):
        a.pop(i)
        b.pop(i)
print(len(a),len(atemp))

答案 2 :(得分:1)

直接在jQuery .each()循环中使用索引,以避免首先添加它们。您还可以避免2x .find()和2x .push

var waypts = [];
var elem = $('#enter-destinations li');
var total = (elem.length-1); // get last index
var inputArray = elem.each(function (index) { // index tells you what iteration you are at
    if(index != total && index != 0){
        var thisAddress = $(this).find('input').val();
        waypts.push({ location : thisAddress, stopover: true });
    }
});
console.log(waypts); //show values that were between first and last

jsfiddle demo

答案 3 :(得分:0)

jsperf中可以看到,popshift看起来比slice更快。

slice创建一个新数组,popshift操纵当前数组。