获取数组中的第一个元素

Mac*_*Mac 201 javascript arrays jquery

你如何从数组中获得第一个元素:

var ary = ['first', 'second', 'third', 'fourth', 'fifth'];
Run Code Online (Sandbox Code Playgroud)

我试过这个:

alert($(ary).first());
Run Code Online (Sandbox Code Playgroud)

但它会回来[object Object].

所以我需要从数组中获取应该是元素的第一个元素'first'.

Joh*_*ock 306

像这样

alert(ary[0])
Run Code Online (Sandbox Code Playgroud)

  • 这假设数组中的第一个元素的索引始终为0.你知道他们对假设的看法...... (62认同)
  • `var a = []; a [7] ='foo'; 警报(A [0]);` (29认同)
  • @Andy没有任何假设,因为OP的问题非常明确和具体. (14认同)
  • @MichielvanderBlonk我只是指出一些用户可能没想到的边缘情况. (5认同)
  • @Petah这段代码没什么问题.它只显示未定义,因为它是[0]的值,实际上是数组中的第一项.如果你想让它显示foo,你应该跳过所有未定义的值,但它不会是数组中的第一项. (4认同)
  • @Petah:`var a = []; a[7] = 'foo'; 警报(a[Object.keys(a)[0]]);` (2认同)
  • @JohnHartsock如果数组为空并且没有[0]值怎么办?此代码会导致错误吗? (2认同)

Mat*_*all 197

为什么你jQuery-ifying一个vanilla JavaScript数组?使用标准JavaScript!

var ary = ['first', 'second', 'third', 'fourth', 'fifth'];
alert(ary[0]);
Run Code Online (Sandbox Code Playgroud)

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array

也, 需要更多jQuery

来源,礼貌的bobince

  • 请参阅[此答案](/sf/answers/805470781/),了解为什么此解决方案并不总是有效。 (6认同)

Sel*_*lay 74

您可以使用shift()方法获取第一个项目,但要小心这个方法修改原始数组(删除第一个项目并返回它).因此,阵列的长度减少了一个.此方法可用于您只需要获取第一个元素的内联案例,但您不关心原始数组.

yourArray[0]
Run Code Online (Sandbox Code Playgroud)

  • 因为这是非常低效和坏事.您可以以非常有效的方式获得第一个元素.shift和unshift都会进行一些检查并遍历整个数组来完成任务,因为当你删除或添加一个新元素时,所有其他索引都应该被移位.这就像你有一辆满载人的公共汽车,当后排座位的人想要下车时,你通过前门清空公共汽车然后让他们再次上车. (9认同)

小智 51

如果已删除第一个元素,则索引0的元素可能不存在
在浏览器控制台中证明它:

let a = ['a', 'b', 'c'];
delete a[0];

for (let i in a) {
  console.log(i + ' ' + a[i]);
}
Run Code Online (Sandbox Code Playgroud)

更好的方法来获得没有jQuery的第一个元素:

function first(p) {
  for (let i in p) return p[i];
}

console.log( first(['a', 'b', 'c']) );
Run Code Online (Sandbox Code Playgroud)

  • a.entries()[0] 应该这样做:) (2认同)

eli*_*ocs 43

如果要保留可读性,可以始终将第一个函数添加到Array.protoype:

Array.prototype.first = function () {
    return this[0];
};
Run Code Online (Sandbox Code Playgroud)

那么你可以轻松找回第一个元素:

[1, 2, 3].first();
> 1
Run Code Online (Sandbox Code Playgroud)

  • 有充分理由以任何方式修改基类原型被认为是一种非常糟糕的做法. (13认同)
  • 这很愚蠢,如何输入`.first()`比做`[0]`更好? (10认同)
  • @jonschlinkert它可以更容易,更快速地阅读 (10认同)
  • @jonschlinkert有些语言的索引从1开始.在这种情况下,`first`是明确的. (10认同)
  • [] .first()返回什么? (6认同)
  • **这是有缺陷的!** 您将该函数添加为可枚举属性,这意味着它将显示为每个数组上的每个 for ... in 循环中的元素之一(!)。[改为使用`Object.defineProperty()`](/sf/answers/3928078941/) (2认同)

Fla*_*ken 40

使用ES6解构

let [first] = [1,2,3];
Run Code Online (Sandbox Code Playgroud)

哪个是一样的

let first = [1,2,3][0];
Run Code Online (Sandbox Code Playgroud)

  • 我建议在这个例子中使用 `const` 而不是 `let`,因为它应该在大多数情况下使用 (4认同)
  • @leonheess 所有 JavaScript 数组都从“[0]”索引开始。 (3认同)
  • 取决于你,只要它不是 `var` :-) (3认同)

tho*_*max 19

如果不保证从索引零填充数组,则可以使用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'
Run Code Online (Sandbox Code Playgroud)

  • 这实际上应该更高.这是我看到的最简洁的解决方案,它使用vanilla js和稀疏数组. (3认同)

Abd*_*UMI 13

array.find(e => !!e);  // return the first element 
Run Code Online (Sandbox Code Playgroud)

因为"find"返回匹配过滤器的第一个元素&& !!e匹配任何元素.

注意: 这只能当第一个元素是不是"Falsy": ,null,false,NaN,,""0undefined

  • 这很棒,也适用于TypeScript.那么简化为`array.find(()=> true);`?这允许你做`[false] .find(()=> true)`. (3认同)

leo*_*ess 13

您可以这样做:

let first = array.find(e => true);
Run Code Online (Sandbox Code Playgroud)

或者,如果您关心真实的元素(可能是您想要的元素):

let first = array.find(Boolean);
Run Code Online (Sandbox Code Playgroud)

关心可读性不是依靠数字发生率我添加了一个first()-function到Array.protoype通过定义它与Object?.define?Property()其中减轻修改的陷阱内置Array对象原型直接(说明如下)。

性能相当不错(find()在第一个元素之后停止),但它并不完美或无法普遍访问(仅适用于ES6)。有关更多背景信息,请阅读@Selays答案

Object.defineProperty(Array.prototype, 'first', {
  value() {
    return this.find(e => true);     // or this.find(Boolean)
  }
});
Run Code Online (Sandbox Code Playgroud)

然后,可以检索第一个元素:

let array = ['a', 'b', 'c'];
array.first();

> 'a'
Run Code Online (Sandbox Code Playgroud)

摘录以查看实际效果:

let first = array.find(e => true);
Run Code Online (Sandbox Code Playgroud)

  • 这是最好,最新的答案。我本来也要在这里发帖,但是在看到你的发帖之后 (3认同)

the*_*ejh 8

试试alert(ary[0]);.


Vik*_*Vik 8

在 ES2015 及以上版本中,使用数组解构:

const arr = [42, 555, 666, 777]
const [first] = arr
console.log(first)
Run Code Online (Sandbox Code Playgroud)

  • 这与 /sf/answers/3413326871/ 的答案相同,但几个月后 (3认同)

小智 8

我更喜欢使用数组解构

const [first, second, third] = ["Laide", "Gabriel", "Jets"];
console.log(first);  // Output: Laide
console.log(second); // Output: Gabriel
console.log(third);  // Output: Jets
Run Code Online (Sandbox Code Playgroud)


pas*_*llo 7

只有在你使用underscore.js(http://underscorejs.org/)的情况下,你才能做到:

_.first(your_array);
Run Code Online (Sandbox Code Playgroud)


Ali*_*eza 7

我知道从其他语言到JavaScript的人们都在寻找类似的东西head()first()获取数组的第一个元素,但是如何做到这一点呢?

假设您有以下数组:

const arr = [1, 2, 3, 4, 5];
Run Code Online (Sandbox Code Playgroud)

在JavaScript中,您可以简单地执行以下操作:

const first = arr[0];
Run Code Online (Sandbox Code Playgroud)

或更整洁的新方法是:

const [first] = arr;
Run Code Online (Sandbox Code Playgroud)

但是你也可以简单地写一个像... 的函数

function first(arr) {
   if(!Array.isArray(arr)) return;
   return arr[0];
}
Run Code Online (Sandbox Code Playgroud)

如果使用下划线,则可以使用功能列表执行与您期望的功能相同的操作:

_.first 

_.head

_.take
Run Code Online (Sandbox Code Playgroud)


Mār*_*dis 6

使用数组的方法,它也适用于对象(注意,对象没有保证的顺序!).

我最喜欢这种方法,因为原始数组没有被修改.

// In case of array
var arr = [];
arr[3] = 'first';
arr[7] = 'last';
var firstElement;
for(var i in arr){
    firstElement = arr[i];
    break;
}
console.log(firstElement);  // "first"

// In case of object
var obj = {
    first: 'first',
    last: 'last',
};

var firstElement;

for(var i in obj){
    firstElement = obj[i];
    break;
}

console.log(firstElement) // First;
Run Code Online (Sandbox Code Playgroud)


Gui*_* HS 6

只需使用ary.slice(0,1).pop();

\n\n

\n\n

\r\n
\r\n
var ary = [\'first\', \'second\', \'third\', \'fourth\', \'fifth\'];\r\n\r\nconsole.log("1\xc2\xba "+ary.slice(0,1).pop());\r\nconsole.log("2\xc2\xba "+ary.slice(0,2).pop());\r\nconsole.log("3\xc2\xba "+ary.slice(0,3).pop());\r\nconsole.log("4\xc2\xba "+ary.slice(0,4).pop());\r\nconsole.log("5\xc2\xba "+ary.slice(0,5).pop());\r\nconsole.log("Last "+ary.slice(-1).pop());
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n\n

array.slice(START,END).pop();

\n


Cor*_*lix 5

使用过滤器查找数组中的第一个元素:

在打字稿中:

function first<T>(arr: T[], filter: (v: T) => boolean): T {
    let result: T;
    return arr.some(v => { result = v; return filter(v); }) ? result : undefined;
}
Run Code Online (Sandbox Code Playgroud)

在普通的javascript中:

function first(arr, filter) {
    var result;
    return arr.some(function (v) { result = v; return filter(v); }) ? result : undefined;
}
Run Code Online (Sandbox Code Playgroud)

同样,indexOf:

在打字稿中:

function indexOf<T>(arr: T[], filter: (v: T) => boolean): number {
    let result: number;
    return arr.some((v, i) => { result = i; return filter(v); }) ? result : undefined;
}
Run Code Online (Sandbox Code Playgroud)

在普通的javascript中:

function indexOf(arr, filter) {
    var result;
    return arr.some(function (v, i) { result = i; return filter(v); }) ? result : undefined;
}
Run Code Online (Sandbox Code Playgroud)


Vin*_*nie 5

另一个只关心真实元素的人

ary.find(Boolean);
Run Code Online (Sandbox Code Playgroud)


نور*_*نور 5

ES6 Spread operator + .shift() 解决方案

使用myArray.shift()您可以获得数组的第一个元素,但.shift()会修改原始数组,因此为避免这种情况,首先您可以创建数组的副本,[...myArray]然后将 应用于.shift()此副本:

var myArray = ['first', 'second', 'third', 'fourth', 'fifth'];

var first = [...myArray].shift();        

console.log(first);
Run Code Online (Sandbox Code Playgroud)