我在javascript中有一个对象数组。我用jquery。
如何获取数组中的第一个元素?我不能使用数组索引 - 因为我在将对象添加到数组时分配每个元素索引。所以索引不是0,1,2等。
只需要获取数组的第一个元素吗?
答案 0 :(得分:4)
如果你不使用顺序编号的元素,你必须循环直到你碰到第一个:
var firstIndex = 0;
while (firstIndex < myarray.length && myarray[firstIndex] === undefined) {
firstIndex++;
}
if (firstIndex < myarray.length) {
var firstElement = myarray[firstIndex];
} else {
// no elements.
}
或一些同等愚蠢的结构。这将为您提供第一个项目的索引,您可能会或可能不关心它。
如果这是您经常需要做的事情,您应该对当前的第一个有效索引进行旁视,这样每次都会成为O(1)操作而不是O(n)。如果您经常需要遍历一个真正的稀疏数组,请考虑另一种数据结构,例如将对象保持在其旁边,将序数结果反向映射到索引,或者适合您的数据。
答案 1 :(得分:4)
filter
方法适用于稀疏数组。
var first = array.filter(x => true)[0];
答案 2 :(得分:2)
您是否考虑过:
function getFirstIndex(array){
var result;
if(array instanceof Array){
for(var i in array){
result = i;
break;
}
} else {
return null;
}
return result;
}
作为获取数组中 last 元素的一种方法:
function getLastIndex(array){
var result;
if(array instanceof Array){
result = array.push("");
array.pop;
}
} else {
return null;
}
return result;
}
这些都不使用jquery。
答案 3 :(得分:2)
class BookOrder(models.Model):
def __unicode__(self):
return self.book.name or self.book.title
返回稀疏数组中第一个元素的索引(以Object.keys(array)[0]
形式)。
String
答案 4 :(得分:1)
我也遇到了类似的问题,并且很惊讶没有人考虑过以下问题:
var testArray = [];
testArray [1245]= 31;
testArray[2045] = 45;
for(index in testArray){
console.log(index+','+testArray[index])
}
以上将产生
1245,31
2045,45
如果需要,你可以在第一次迭代后存在,如果需要的话,但通常我们需要知道数组的开始位置。
答案 5 :(得分:1)
这是一个使用ES5方法的提案Array#some
。
代码获取第一个nonsparse元素和索引。迭代在回调中返回true
时立即停止:
var a = [, , 22, 33],
value,
index;
a.some(function (v, i) {
value = v;
index = i;
return true;
});
console.log(index, value);
答案 6 :(得分:0)
如果您发现自己需要对数组进行大量操作,那么您可能会对Underscore库感兴趣。它提供了操作数组的实用方法,例如compact:
var yourArray = [];
yourArray[10] = "foo";
var firstValue = _.compact(yourArray)[0];
但是,在构建阵列时,听起来确实有些奇怪。也许Array.push会帮助你吗?