在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ ES6對(duì)象數(shù)組根據(jù)某個(gè)屬性去重最優(yōu)雅的實(shí)現(xiàn)方式是什么?

ES6對(duì)象數(shù)組根據(jù)某個(gè)屬性去重最優(yōu)雅的實(shí)現(xiàn)方式是什么?

符合題意的解決辦法

function unique(arr) {
    const res = new Map();
    return arr.filter((a) => !res.has(a) && res.set(a, 1))
}

因?yàn)閙ap key唯一,所以你想要根據(jù)哪個(gè)屬性去重,res.has(a)里a就可以改成什么,比如a.name

參考:

https://segmentfault.com/a/11...

箭頭函數(shù)

return arr.filter((a) => !res.has(a) && res.set(a, 1))
//上面的代碼可以改成這樣
return arr.filter(function(a){
    return !res.has(a) && res.set(a, 1);
});

1、箭頭函數(shù)寫(xiě)代碼擁有更加簡(jiǎn)潔的語(yǔ)法;
2、不會(huì)綁定this。


分割線,下面是我的個(gè)人問(wèn)題,跟問(wèn)題有些出入,采納了我符合我個(gè)人問(wèn)題的答案,抱歉

我是這么寫(xiě)的,
參考了
https://segmentfault.com/q/10...

https://blog.csdn.net/zhihua_...

問(wèn)題和文章,但覺(jué)得不是很優(yōu)雅,好像沒(méi)有用什么es6的新東西,請(qǐng)問(wèn)es6有更好地實(shí)現(xiàn)方式嗎?謝謝各位

getGameVersionList() {
    const versionList = this.page.resultList
    const versionSet = [0]
    const hash = {}
    for (var i = 0, gameVersion; (gameVersion = versionList[i]) != null; i++) {
      if (!hash[gameVersion.gameVersionNo]) {
        versionSet.push(gameVersion.gameVersionNo)
        hash[gameVersion.gameVersionNo] = true
      }
    }
    this.gameVersionNoSet = versionSet
  },
回答
編輯回答
過(guò)客

用filter吧,符合條件的可以直接return,在配合存hash。

hash直接把值作為key是有坑的,比如[1, '1', [1]],這三個(gè)當(dāng)作key就一模一樣都是'1'
用map也不行:

let map = new Map();
map.set([1], 'test');
map.get([1]) //undefined

前后的[1]不是同一個(gè)一樣取不到,還是object模擬hash配合類型判斷吧。


剛想了下,兩個(gè)[1]本來(lái)就不重復(fù),看需求吧,還是可以用map做hash的。

2017年6月25日 05:27
編輯回答
夏夕

用lodash吧
unionBy

2017年12月22日 07:47
編輯回答
舊顏
getGameVersionList() {
    return [0, ...new Set(this.page.resultList.map(item => item.gameVersionNo))]
}
2017年7月8日 22:54