若要將多個值新增至 Array 中指定 Index,原本 Element 全部往後移,Ramda 提供了 insertAll()
。
Version
macOS Catalina 10.15.2
VS Code 1.41.1
Quokka 1.0.276
Ramda 0.26.1
Imperative
let data = [0, 4, 5]
let insertAll = idx => vals => arr => {
let result = []
for(let i = 0; i < arr.length; i++) {
if (i === idx)
result.push(...vals, arr[i])
else
result.push(arr[i])
}
return result
}
insertAll(1)([1, 2, 3])(data) // ?
Imperative 會藉由 for
loop 判斷 index,藉由 ES6 的 ...
array spread 可輕易將指定 vals
array 插入原 array。
reduce()
let data = [0, 4, 5]
let insertAll = idx => vals => arr => arr.reduce(
(a, x, i) => i === idx ? [...a, ...vals, x] : [...a, x]
,[])
insertAll(1)([1, 2, 3])(data) // ?
既然能使用 for
loop 實現,也能使用 reduce()
改寫。
別忘了 reduce()
的第三個 parameter 為 index,因此可用來判斷指定 index。
Ramda
import { insertAll } from 'ramda'
let data = [0, 4, 5]
insertAll(1)([1, 2, 3])(data) // ?
Ramda 提供了 insertAll()
可直接使用。
insertAll()
Number → [a] → [a] → [a]
將 array 新增至指定 index 的 array
Number
:指定 index
[a]
:要新增的 array
[a]
:data 為 array
[a]
:回傳新 array
Conclusion
insertAll()
與insert()
類似,唯insertAll()
是新增 array,而insert()
是新增單一值