2017-09-12 117 views
-2

我想將此代碼更改爲ES6,特別是我想使用Object.assign功能使其不可變。 這是我得到更改代碼爲ES6

function toggle(arr, obj){ 
    for(var i=0; i<arr.length; i++){ 
     if(arr[i].name ==obj.name){ 
     arr[i].checked=true; 
     } 
     return arr; 
    } 
    } 


    var arr = [ 
    {name: "play", checked:false}, 
    {name: "swim", checked:false}, 
    {name: "sing", checked:false} 
    ]; 

    toggle(arr, {name: "play", checked:false}); 

它所做的是它改變了傳遞的對象的「選中」屬性從假到真。現在它覆蓋了我原來的對象,我想避免它。

這是我到目前爲止有:

function toggle(arr, obj){ 
    for(var i=0; i<arr.length; i++){ 
     if(arr[i].name ==obj.name){ 
     var newArr = Object.assign({}, arr[i], { arr[i].checked: true}); 
     } 

    } 
    } 
+1

我們不鼓勵的帖子,簡單地陳述問題斷章取義做,並期望社區解決它。假設你試圖自己解決它並陷入困境,那麼如果你寫下了你的想法和你無法想象的東西,這可能會有所幫助。它肯定會爲你的帖子提供更多的答案。在此之前,這個問題將被投票停止/降低投票。 – Cerbrus

+0

@Cerbrus謝謝你的反饋,我只是不喜歡我的解決方案,所以我沒有分享它。我現在添加它 – Polina

回答

2

您可以通過以下方式

var arr = [ 
 
    {name: "play", checked:false}, 
 
    {name: "swim", checked:false}, 
 
    {name: "sing", checked:false} 
 
    ]; 
 

 
//toggle(arr, {name: "play", checked:false}); 
 

 
arr = arr.map((a) => { 
 
    return a.name != "play" ? a : Object.assign(a, {checked : true}); 
 
}) 
 

 
console.log(arr);

+0

這樣一個美麗的解決方案!感謝您的幫助! @ marvel308 – Polina