2016-08-02 80 views
1

此函數循環遍歷一個對象數組,並將一個對象作爲第二個參數。ES6執行此功能?

如果firstname值匹配,它將通過對象數組循環遍歷對象數組,使用作爲第二個參數傳入的對象替換它。

我相信有一個更好的方式來實現這個功能使用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

沒有,沒有使用情況的蔓延運營商這裏。爲了使簡化是在下降的tempArray變量和使用item代替arr[i]

function foo(arr, obj) { 
    return arr.map((item, i) => { 
    if (item.name === obj.name) { 
     return obj 
    } else { 
     return item 
    } 
    }); 
} 

,你可以進一步縮短到

const foo = (arr, obj) => 
    arr.map(item => 
    item.name === obj.name ? obj : item 
); 
1

試試使用項目

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

我想你甚至可以把它寫成

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