2016-04-05 20 views
24

Tôi muốn sử dụng chức năng map() trên một mảng javascript, nhưng tôi muốn nó hoạt động theo thứ tự ngược lại.Có cách nào để sử dụng map() trên một mảng theo thứ tự ngược với javascript?

Lý do là, tôi sẽ hiển thị các thành phần React xếp chồng lên nhau trong dự án Meteor và muốn phần tử cấp cao nhất hiển thị đầu tiên trong khi phần còn lại tải hình ảnh bên dưới.

var myArray = ['a', 'b', 'c', 'd', 'e']; 
myArray.map(function (el, index, coll) { 
    console.log(el + " ") 
}); 

in ra a b c d e nhưng tôi muốn có một mapReverse() mà in e d c b a

Bất kỳ lời đề nghị?

+2

Tại sao bạn không 'đảo ngược mảng? – John

+2

Để sắp xếp các yếu tố tôi đặt chỉ mục z theo chỉ mục mảng. Tôi cho rằng tôi có thể đặt chỉ số z là âm. –

+0

Âm thanh như một ý tưởng hay. – John

Trả lời

38

Nếu bạn không muốn đảo ngược mảng ban đầu, bạn có thể tạo một bản sao cạn của nó sau đó bản đồ của mảng đảo ngược,

myArray.slice(0).reverse().map(function(... 
+0

Tôi đã kết thúc chỉ bằng cách sử dụng các chỉ số tiêu cực để xác định z-index, nhưng trong cách tôi đóng khung câu hỏi này là chính xác nhất. –

+0

Tại sao chúng ta cần .slice (0)? Tại sao không myArray.reverse() thay vì myArray.slice (0) .reverse()? Có vẻ như câu trả lời cho nhận xét của tôi là ở đây: https://stackoverflow.com/questions/5024085/whats-the-point-of-slice0-here – Haradzieniec

+0

Haradzieniec - Nó đi kèm với các chi tiết về cách câu hỏi ban đầu được đóng khung, trong rằng thứ tự ban đầu là cần thiết để thiết lập thuộc tính css chỉ mục Z, nhưng in ngược lại. – AdamCooper86

-1

Bạn có thể thực hiện myArray.reverse() trước tiên.

var myArray = ['a', 'b', 'c', 'd', 'e']; 
myArray.reverse().map(function (el, index, coll) { 
    console.log(el + " ") 
}); 
+0

Đó sẽ là giải pháp của tôi nói chung, nhưng trong quá trình cài đặt, tôi đang sử dụng thẻ trên cùng được đặt cùng với chỉ mục cuối cùng. Tôi đoán chỉ là một số chỉ mục tốt hơn có thể giải quyết vấn đề. –

+11

Cũng giống như một lưu ý, điều này sẽ đảo ngược mảng ban đầu tại chỗ, có nghĩa là nó sẽ thay đổi thứ tự của mảng một cách triệt để. – AdamCooper86

6

Bạn có thể sử dụng Array.prototype.reduceRight()

var myArray = ["a", "b", "c", "d", "e"]; 
 
var res = myArray.reduceRight(function (arr, last, index, coll) { 
 
    console.log(last, index); 
 
    return (arr = arr.concat(last)) 
 
}, []); 
 
console.log(res, myArray)

0

Tôi thích wri te chức năng mapReverse một lần, sau đó sử dụng nó. Ngoài ra, điều này không cần phải sao chép mảng.

function mapReverse(array, fn) { 
    return array.reduceRight(function (result, el) { 
     result.push(fn(el)); 
     return result; 
    }, []); 
} 

console.log(mapReverse([1, 2, 3], function (i) { return i; })) 
// [ 3, 2, 1 ] 
console.log(mapReverse([1, 2, 3], function (i) { return i * 2; })) 
// [ 6, 4, 2 ] 
Các vấn đề liên quan