最近再寫一個數組渲染時,源數據是拿到的數組通過排序後的數組,正常運行卻出現爆紅:vue
報紅代碼:數組
computed: { ...mapState({ fromNames (state) { let fromNames = state.quote.fromNames; return fromNames.sort((a, b) => b.isBind - a.isBind);; }, }), },
而後...
函數
而後百思不得解,最終找到源頭:oop
你的確致使了一個無限循環, 由於
array.sort()
改變了數組自身,致使了過濾器又一次被觸發。確保在副本上對數組排序:
return value.slice().sort(...)
解決方案:spa
computed: { ...mapState({ fromNames (state) { let fromNames = state.quote.fromNames; return fromNames.slice().sort((a, b) => b.isBind - a.isBind); }, }), },
array.slice()
用法arr.slice([begin[, end]])
slice()
方法會淺複製
(shallow copy)數組的一部分到一個新的數組,並返回這個新數組。prototype
slice()
能夠用於把一個類數組對象
轉化爲一個新數組
。code
例如:component
function list() { return Array.prototype.slice.call(arguments); } var list1 = list(1, 2, 3); // [1, 2, 3]
也可使用.call
綁定在函數的Function.prototype
(也能夠被簡化爲[].slice.call(arguments)
)對象
var unboundSlice = Array.prototype.slice; var slice = Function.prototype.call.bind(unboundSlice); function list() { return slice(arguments); } var list1 = list(1, 2, 3); // [1, 2, 3]
或者blog
[].slice.call({ 0: 0, 1 : 2, 2: 4, length: 4 }) //[0, 2, 4, empty]