回答
我建議避免each
,除非您絕對需要爲集合中的每個項目引發副作用(觸發事件,打印結果等)。爲了簡單地修改你的收藏,有更好的方法。
如果每個添加元素僅僅是一個單獨的輸入元件的結果,典型的功能性圖案。將flatmap
陣列,它可以被認爲是一個兩個步驟:
- 使用
map
施加函數爲每個元素生成一個數組作爲結果。總體結果將是一個數組數組。 - 在該數組數組上使用
flatten
來獲得一維數組。
使用underscore或lodash:
var origArray = [1, 2, 3, 4];
var duplicateIf3 = function (val) { return val === 3 ? [val, val] : val; };
_.flatten(origArray.map(duplicateIf3));
// -> [1, 2, 3, 3, 4]
(在類型化FP,該功能將不得不返回[val]
對於不是3的值,但flatten
並不關心 - 它變平不管你給它一個維度。)
如果新元素依賴於它之前的所有元素,那麼可能會使用reduce
或fold
,而將空數組作爲初始值。
var origArray = [1, 2, 3, 4];
origArray.reduce(function (acc, val) { return acc.concat(acc).concat(val); }, []);
// -> [1, 1, 2, 1, 1, 2, 3, 1, 1, 2, 1, 1, 2, 3, 4]
(抱歉,我不能想到一個現實的例子,但這裏的每一個步驟使用的用於說明目的相當簡單的方式,所有前面的步驟全力輸出,並且可以從原來的每個值見陣列發生了什麼事情。另外請注意,你可以從reduce
使自己flatten
,如果你不想使用下劃線/ lodash)
reduce
比flatmap
比較一般,但是這兩種方法都能夠數組轉換成一個更大的陣列,一些如何依賴於第一個。
如果您有興趣瞭解更多信息,我強烈建議您查看Reg Braithwaite提供的免費(在線)Javascript Allongé。
我不知道你的安全的意思,但你必須有很好的理由這樣做。我打得四處這一點,這是我的了:
_.each(a, function(el) {
if (el % 2 == 0)
a.push(el + 1);
console.log(el);
});
// logs 1, 2, 3, 4, 5
console.log(a);
// logs [ 1, 2, 3, 4, 5, 3, 5 ]
在這種情況下,有沒有負面影響,除非你只想通過添加的元素,但是你會發現自己在棘手的情況下,如果你'改變特定元素:
_.each(a, function(el, index) {
a[index + 1] = el - 1;
if (el % 2 == 0)
a.push(el + 1);
console.log(el);
});
// logs 1, 0, -1, -2, -3
在大多數使用情況下使用_.map
會更有意義。
可以肯定的是,這對於.splice()來說並不安全。 – nrabinowitz
- 1. 修改(..in ..)循環中的數組是否安全?
- 2. 修改(..in ..)循環中的對象是否安全?
- 3. 如何安全地循環修改可變數組?
- 4. componentWillUpdate - 修改nextProps或nextState是否安全?
- 5. 用手修改CCK表是否安全?
- 6. for循環修改錯誤的數組
- 7. 修改組內對象的可變成員是否安全?
- 8. 修改循環
- 9. 從Qt的槽功能中修改參數是否安全?
- 10. 在循環的停止條件下訪問數組值是否安全?
- 11. 在Apache Cordova(PhoneGap)環境中手動修改Android清單文件是否安全?
- 12. C#數組是否線程安全?
- 13. 在for循環中做一個空的while循環是否安全?
- 14. 安全使用循環變量循環
- 15. 在循環中修改Wordpress中的$ post變量是否合理?
- 16. 同時循環同一個List是否安全?
- 17. 在for循環中引用累加器是否安全?
- 18. 在for:in循環中重新分配NSArray指針是否安全?
- 19. 在viewstate中修改項目 - 是否安全?
- 20. 是否安全地修改Setting.cs文件(Settings.settings的部分類)
- 21. 修改Android NDK中的android_native_app_glue.c文件是否安全?
- 22. 修改複製的表上的觸發器是否安全?
- 23. 在PHP中修改.htaccess文件是否安全?
- 24. 僅修改magento中的phtml文件是否安全?
- 25. 是否有修改Ioncube公司文件,使之更加安全
- 26. 修改STL容器的內容是否安全?
- 27. Javascript修改安全性?
- 28. 修改DataView線程安全
- 29. 我如何修改foreach循環內的數組?
- 30. 循環NumPy數組行/列並修改值
請顯示驗證碼。 – jfriend00
通常不會,但是查看代碼片段會有所幫助,以便我們可以確定用例的確切答案。 –
對Underscore沒有把握,但是通常情況下,提供迭代方法的庫往往會緩存數組的長度,因此如果在迭代過程中添加或刪除元素,就會感到困惑。但是用傳統的循環替代並自己管理索引變量並不難。 – nnnnnn