2016-04-05 13 views
24

我想在javascript數組上使用map()函數,但我希望它以相反的順序操作。有沒有一種方法可以使用JavaScript以相反的順序使用map()?

原因是,我在一個Meteor項目中渲染堆疊的React組件,並希望頂層元素先渲染,而其餘的負載圖像在下面。

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

打印出a b c d e,但我希望能有那個印e d c b a

任何建議一mapReverse()?

+2

你爲什麼不「倒轉」數組? – John

+2

要訂購元素,我按數組索引設置z-index。我想我可以設置Z指數爲負數。 –

+0

聽起來很不錯。 – John

回答

38

如果你不想扭轉原來的數組,你可以做一個淺拷貝它,然後地圖反轉陣列,

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

我最終只使用了負指數來指定z-索引,但是按照我構建問題的方式,這是最正確的。 –

+0

爲什麼我們需要.slice(0)?爲什麼不myArray.reverse()而不是myArray.slice(0).reverse()?看起來像我的評論的答案在這裏:https://stackoverflow.com/questions/5024085/whats-the-point-of-slice0-herehere – Haradzieniec

+0

Haradzieniec - 它與原來的問題是如何框架的詳細資料需要原始排序來設置Z索引css屬性,但是反向打印。 – AdamCooper86

-1

您可以先執行myArray.reverse()。

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

這將是我的解決方案,但在設置我使用頂部卡放置與最後一個索引。我想只是一些更好的索引可以解決這個問題。 –

+11

就像一個註釋,這將扭轉原來的陣列,這意味着它將破壞性地改變陣列的順序。 – AdamCooper86

6

您可以使用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

我比較喜歡wri使用mapReverse函數一次,然後使用它。 這也不需要複製數組。

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 ] 
相關問題