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

    .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' }]