≪ Today I learned. RSS購読
公開日
タグ
JavaScript
著者
ダーシノ(@bc_rikko)

.slice().splice()と.with()/.toSpliced()の関係

Array#with()Array#toSpliced()が追加された。

Array.slice().splice(index, 1, newItem) = Array.with(index, newItem) = Array.toSpliced(index, 1, newItem)という関係だ。

After

const items = [{ name: 'a' }, { name: 'b' }, { name: 'c' }]

// 2つ目の要素のオブジェクトを書き換える
items.splice(1, 1, { name: 'new' })
console.log(items)  // [{ name: 'a' }, { name: 'new' }, { name: 'c' }]

// 元の配列を書き換えない場合
const newItems = items.slice().splice(1, 1, { name: 'new' })

Before

const newItems = items.with(1, { name: 'new' })

console.log(items)     // [{ name: 'a' }, { name: 'b' }, { name: 'c' }]
console.log(newItems)  // [{ name: 'a' }, { name: 'new' }, { name: 'c' }]

または

const newItems = items.toSpliced(1, 1, { name: 'new' })

console.log(items)     // [{ name: 'a' }, { name: 'b' }, { name: 'c' }]
console.log(newItems)  // [{ name: 'a' }, { name: 'new' }, { name: 'c' }]