2016-08-02 8 views
1

この関数はオブジェクトの配列をループし、2番目のパラメータとしてオブジェクトを受け取ります。この機能のES6実装?

firstnameの値が一致する場合、オブジェクトの配列を2番目の引数として渡されたオブジェクトに置き換えます。

私はこの関数をES6スプレッド演算子を使用して実装するより良い方法があると確信していますが、実装に問題があります。

const foo = (arr, obj) => { 
 
    const tempArray = arr.map((item, i) => { 
 
    if (arr[i].name === obj.name) { 
 
     return obj 
 
    } else { 
 
     return arr[i] 
 
    } 
 
    }) 
 
    return tempArray 
 
} 
 

 
const arrOfObjx = [ 
 
    { 
 
     "name": "Joe", 
 
     "favMovie": "Rambo" 
 
    }, 
 
    { 
 
     "name": "Jane", 
 
     "favMovie": "The Matrix" 
 
    }, 
 
    { 
 
     "name": "John", 
 
     "favMovie": "Star Wars" 
 
    } 
 
] 
 

 
const newJoe = { 
 
    "name": "Joe", 
 
    "favMovie": "ROCKY" 
 
} 
 

 
console.log(foo(arrOfObjx, newJoe))

答えて

2

としてそれを書くことができると思う項目

const tempArray = arr.map((item, i) => { 
    if (item.name === obj.name) { 
     return obj 
    } else { 
     return item 
    } 
}) 

を使用して試してみてくださいここに。作るために単純化tempArray変数をドロップにし、item代わりのarr[i]を使用している:

あなたはさらに

const foo = (arr, obj) => 
    arr.map(item => 
    item.name === obj.name ? obj : item 
); 
に短縮することができ
function foo(arr, obj) { 
    return arr.map((item, i) => { 
    if (item.name === obj.name) { 
     return obj 
    } else { 
     return item 
    } 
    }); 
} 

1

私はあなたにもありません、スプレッドオペレータのためのユースケースはありません

const tempArray = arr.map((item, i) => { 
    return (item.name === obj.name ? obj : item) 
}) 
関連する問題