0
我有這個對象數組,並且想要賦予特定鍵的唯一元素。 數組是這樣的:javascript高階函數變量未定義
var items = [
{name: "item1", year : 2013, value : 100},
{name: "item1", year : 2012, value : 97},
{name: "item3", year : 2013, value : 93 },
{name: "item3", year : 2012, value : 91 },
{name: "item2", year : 2012, value : -6 },
{name: "item2", year : 2011, value : -5 },
{name: "item4", year : 2012, value : -36 },
{name: "item3", year : 2011, value : 93 },
{name: "item4", year : 2013, value : -35 },
{name: "item1", year : 2011, value : 98},
{name: "item2", year : 2013, value : -7 },
{name: "item4", year : 2011, value : -37 },
{name: "item5", year : 2013, value : 58 },
{name: "item5", year : 2012, value : 55 },
{name: "item5", year : 2011, value : 54 }];
我得到的密鑰名稱的獨特元素具有以下功能列表:
var unique = function (arr) {
return arr.reduce(function (prev, curr) {
if (prev.indexOf(curr.name) === -1) {prev.push(curr.name)}
return prev;
}, [])}
所以當我做的console.log(唯一的(項目))我得到正確的數組:
[ 'item1', 'item3', 'item2', 'item4', 'item5' ]
如果我在curr.name改變name
與year
我得到正確的結果。 我想要做一個高階函數,所以我既可以通過我的工作的陣列和關鍵,所以我會做unique(items, 'name')
或可替代unique(items, 'year')
但是當我改變我的獨特功能,這一點:
var unique = function (arr, criteria) {
return arr.reduce(function (prev, curr) {
if (prev.indexOf(curr.criteria) === -1) {prev.push(curr.criteria)}
return prev;
}, [])}
和我做console.log(unique(items, 'name'))
我得到undefined
!? 如果我做console.log(unique(items, name)
我得到一個錯誤ReferenceError:name is not defined !!