2011-06-27 39 views
27

Làm cách nào để có được mục thứ hai cuối cùng trong một mảng?lấy mục thứ hai đến mục cuối cùng của một mảng?

Ví dụ,

var fragment = '/news/article-1/' 
var array_fragment = fragment.split('/'); 
var pg_url = $(array_fragment).last()[0]; 

này trả về một giá trị rỗng. Nhưng tôi muốn nhận được article-1

Cảm ơn.

Trả lời

49

Không phải mọi thứ đều phải được thực hiện bằng jQuery.

Trong cũ đồng bằng javascript bạn có thể làm:

var pg_url = array_fragment[array_fragment.length - 2] 

dễ dàng hơn và nhanh hơn :)

+2

Đó được yếu tố cuối cùng, không phải là người áp chót. Đã sửa đổi – lonesomeday

+0

. cảm ơn –

+0

đó là một phép thuật! cám ơn rất nhiều! :-) – laukok

1
var pg_url = array_fragment[array_fragment.length -2] 

array_fragment không phải là một biến jquery, đó là một biến javascript cũ đồng bằng nên không cần $()

34

Có vẻ như bạn cũng có thể sử dụng phương thức slice của Javascript:

> path = 'a/b/c/d'; 
> path.split('/').slice(-2, -1)[0]; 
'c' 

Bạn cũng có thể nghĩ đến "thứ hai để yếu tố cuối cùng trong mảng" là "Yếu tố thứ hai của mảng đảo ngược":

> path = 'a/b/c/d'; 
> path.split('/').reverse()[1]; 
'c' 
+8

câu trả lời này là thanh lịch và hữu ích hơn nhiều so với được chấp nhận – smnbbrv

1

Nếu truy cập vào mảng trong ngược lại là một cái gì đó có nghĩa là sẽ được thường được yêu cầu và không chỉ là chỉ số thứ hai đến cuối cùng, có thể sử dụng mở rộng đơn giản cho mẫu thử nghiệm.

Khi mở rộng thứ gì đó lớn và được sử dụng làm nguyên mẫu Array, đảm bảo rằng bạn sẽ không ảnh hưởng đến bất kỳ phần nào khác của việc sử dụng nó. Điều này được thực hiện bằng cách đảm bảo rằng thuộc tính không được liệt kê để for in sẽ không bị nghẹt thở ở bất kỳ nơi nào khác (một số người và thư viện sử dụng for in để lặp mảng).

Object.defineProperty(Array.prototype, 'rev', { 
 
    enumerable: false, 
 
    value: function(index){ 
 
    return this[this.length - 1 - index]; 
 
    } 
 
}); 
 

 
document.write([1,2,3,4,5,6].rev(1));

Và bây giờ bạn có thể sử dụng không dựa indexing ngược lại.

+0

Nó thường không phải là một ý tưởng tốt để thay đổi nguyên mẫu ... –

8

Bước 1: Sử dụng tách() Phương pháp tách các phần tử thành một mảng.

var fragment_arr = fragment.split("/"); 

Bước 2: Sử dụng lát (-2) Phương pháp để chọn 2 yếu tố cuối cùng từ mảng, các số âm để chọn từ ngày kết thúc của một mảng.

var lastTwo = fragment_arr.slice(-2); 

Bước 3: lastTwo mảng chứa hai yếu tố cuối cùng của fragment_arr, bây giờ bạn có thể truy cập như câu trả lời

var element = lastTwo[0]; 
alert(element); 

ngắn này: bạn có thể kết hợp bước 2 và 3 như dưới đây

var element = fragment_arr.slice(-2)[0]; 
alert(element); 
+0

Nếu câu trả lời của bạn chỉ là" thử này " , nó không phải là một câu trả lời. Đó là một bình luận. Để viết câu trả lời hữu ích, vui lòng thêm mô tả. –

+0

Điều này không cung cấp câu trả lời cho câu hỏi. Để phê bình hoặc yêu cầu làm rõ từ tác giả, hãy để lại nhận xét bên dưới bài đăng của họ. - [Từ đánh giá] (/ review/low-quality-posts/11238794) –

+0

@DanielCheung - Tôi nghĩ, tôi đã cập nhật những gì bạn mong đợi và tôi đã học được cách trình bày câu trả lời. cảm ơn. – 151291

0

Các công trình sau đây dành cho một chuỗi có phần phụ 'url'.

var fragment = '/t/e/s/t/i/n/g/'; 
var fragment = '/t/'; 

Nếu đoạn có độ dài thay đổi, bạn cần một giải pháp phù hợp với nhiều kích cỡ đoạn khác nhau.

var fragment = '/news/article-1/'; 
var array_fragment = fragment.split('/'); 

Chia tách chuỗi mảnh nơi nó tìm thấy '/' s. Split lấy giá trị trước và sau ký tự phân tách. Trong trường hợp này không có gì trước dấu gạch chéo đầu tiên hoặc sau dấu gạch chéo cuối cùng. Các giá trị rỗng được thêm vào array_fragment ở vị trí mảng đầu tiên và cuối cùng.

jQuery 
var pg_url = $(array_fragment)[$(array_fragment).length - 2]; 

javascript 
var pg_url = array_fragment[array_fragment.length - 2]; 

Như bạn có thể thấy, jQuery không cần thiết cho giải pháp này.

Array_fragment.length - 2 đang tính chiều dài của mảng_fragment và chọn mục thứ hai từ cuối. Giá trị cuối cùng là "" do Split ('/') thêm một giá trị rỗng vào cuối mảng array_fragment.

giản và tất cả cùng nhau đưa:

var f = '/t/e/s/t/i/n/g/'.split('/'); 
f[f.length - 2] 
0
const myArray: Array<string> = ['first', 'second', 'third']; 

Chia myArray bởi mục cuối cùng thứ hai.

const twoItemsFromEnd = myArray.slice(-2); //Outputs: ['second', 'third'] 

Sau đó

const secondLast = twoItemsFromEnd[0]; 

Hoặc:

const secondLast = (params.slice(-2))[0]; 
+0

Câu trả lời của [JJ Geewax] (https://stackoverflow.com/a/24331358/6225838) ở đây đã bao gồm câu trả lời của bạn ... Nó thực sự đơn giản và chi tiết hơn vì nó sử dụng tham số thứ hai của slice cho mảng chỉ có phần tử áp chót mà không khai báo các biến khác (ví dụ '[1,2,3] .slice (-2, -1) [0] === 2') – CPHPython

Các vấn đề liên quan