如何从这样的数组中获取第一个元素:
var ary = ['first', 'second', 'third', 'fourth', 'fifth'];
我试了一下:
alert($(ary).first());
但它会返回[object object]。所以我需要从数组中获取第一个元素它应该是元素first。
如何从这样的数组中获取第一个元素:
var ary = ['first', 'second', 'third', 'fourth', 'fifth'];
我试了一下:
alert($(ary).first());
但它会返回[object object]。所以我需要从数组中获取第一个元素它应该是元素first。
当前回答
其他答案的问题是,许多答案不能处理数组为空或未定义的情况,而能够处理这个问题的答案要么很难读取,要么需要使用库。
我能想到的最干净的纯JavaScript方法是使用可选的链接和三元操作符:
Const first = array?长度呢?数组[0]:undefined
如果你需要支持旧的浏览器,你也可以在没有可选的链接的情况下这样做:
Const first = array && array。长度呢?数组[0]:undefined
这样做的另一个好处是,如果你需要返回一个非undefined的值(例如在React组件中返回null),你可以很容易地更新代码来做到这一点。
其他回答
var ary = ["first", "second", "third", "fourth", "fifth"];
console.log(ary.shift());
//first
cosnole.log(ary);
// ["second", "third", "fourth", "fifth"]
像这样
alert(ary[0])
@NicoLwk你应该用splice删除元素,这会把你的数组移回来。所以:
var a=['a','b','c'];
a.splice(0,1);
for(var i in a){console.log(i+' '+a[i]);}
如果你的数组不能保证从索引0填充,你可以使用array .prototype.find():
var elements = []
elements[1] = 'foo'
elements[2] = 'bar'
var first = function(element) { return !!element }
var gotcha = elements.find(first)
console.log(a[0]) // undefined
console.log(gotcha) // 'foo'
以下是针对不同情况的一些方法。
在大多数正常情况下,访问第一个元素的最简单方法是通过
yourArray[0]
但这需要检查[0]是否实际存在。
另一个常用的方法是shift(),但是应该避免为了访问第一个元素而使用它。
这个方法修改原始数组(删除第一项并返回它),但重新索引数组中剩下的内容,使其从0开始(将所有内容向下移动)。因此,数组的长度减少了1。 在一些良好的情况下,您可能需要这样做,例如,获取队列中等待的第一个客户,但是将它用于访问第一个元素的目的是非常低效的。
此外,这需要一个完整的[0]索引指针的完美数组,就像使用[0];
yourArray.shift()
需要知道的重要一点是,只有当数组以[0]索引开始时,上面两个选项才是一个选项。
有些情况下,第一个元素已经被删除,例如使用delete yourArray[0],让数组留下“孔”。现在[0]处的元素是未定义的,但是您想获取第一个“现有”元素。我在现实世界中见过很多这样的例子。
所以,假设我们不知道数组和第一个键(或者我们知道有洞),我们仍然可以得到第一个元素。
可以使用find()获取第一个元素。
find()的优点是它的效率,因为当到达满足条件的第一个值时,它会退出循环(下面会详细介绍)。 (您也可以自定义条件以排除null或其他空值)
var firstItem = yourArray.find(x=>x!==undefined);
我还想在这里包含filter()作为一个选项,以首先“修复”副本中的数组,然后在保持原始数组完整(未修改)的情况下获取第一个元素。
这里包含filter()的另一个原因是它在find()之前就存在了,许多程序员已经在使用它(它是ES5而find()是ES6)。
var firstItem = yourArray.filter(x => typeof x!==undefined).shift();
警告filter()并不是真正有效的方法(filter()会遍历所有元素)并创建另一个数组。在小型数组上使用它是可以的,因为性能影响很小,例如,更接近于使用forEach()。
我在一些项目中看到的另一个方法是splice()来获取数组中的第一项,然后通过索引获取它:
var firstItem = yourArray.splice(0, 1)[0];
我不明白你为什么要那样做。这种方法不能解决数组(稀疏数组)中有洞的问题。它的代价很高,因为它将重新索引数组,并返回一个必须再次访问以获取值的数组。例如,如果删除了前两个元素,那么splice()将返回未定义的值,而不是数组中第一个定义的值。
find()和filter()都保证了元素的顺序,因此可以像上面那样安全地使用。
**(我看到有些人建议使用循环来获取第一个元素,但我不建议使用这种方法。显然,你可以使用任何循环从数组中获取值,但为什么要这么做呢? 可读性,优化,不必要的代码块等。使用本机函数时,浏览器可以更好地优化代码。它甚至可能不适用于某些不能保证迭代顺序的循环。
顺便说一下,forEach()并没有像许多人建议的那样解决这个问题,因为您无法破坏它,而且它将遍历所有元素。使用简单的for循环和检查键/值会更好,但为什么呢?**