LINDORใฎAdvent Calendar๏ผˆๆœฌ็‰ฉ๏ผ‰ใฎ18ๆ—ฅ็›ฎใ‚’้–‹ใ‘ใŸใจใ“ใ‚ใ€‚
้…ๅˆ—ใจใ‹ใŠใ‚ŒใŠใ‚ŒAdvent Calendar2018 – 18ๆ—ฅ็›ฎ

ใ‚ใ‚Šใใ†ใงใชใ„ใƒกใ‚ฝใƒƒใƒ‰ใ€ใใ‚ŒใŒ้‡่ค‡ๆŽ’้™คใงใ™ใ€‚

Underscore.jsใ‚„Lodashใซใฏ uniq() ใฆใฎใŒใ‚ใฃใฆใ€ใ“ใ‚“ใชๆ„Ÿใ˜โ†“ใงไฝฟใˆใพใ™ใ€‚

const arr0 = [11, 22, 11, 22, 33];
const arr1 = _.uniq(arr0);

JavaScriptใซใฏใ‚ใ‚Šใพใ›ใ‚“ใ€‚

Set ใ‚’ไฝฟใ†

ๅ˜็ด”ใชๅ€คใชใ‚‰ใ“ใ‚ŒใŒไธ€็•ช็ฐกๅ˜ใ€‚

Set ใฏ้‡่ค‡ใ—ใชใ„ๅ€คใ‚’ๆ ผ็ดใงใใ‚‹ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใงใ™ใ€‚ ... ใงๅฑ•้–‹ใ—ใฆ้…ๅˆ—ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใธๅ†ๅค‰ๆ›ใ—ใพใ™ใ€‚

const arr0 = [11, 22, 11, 22, 33];
const arr1 = [...new Set(arr0)];
console.log(arr1); // => [ 11, 22, 33 ]

includes() ใง็ขบ่ชใ™ใ‚‹

ใ“ใ‚ŒใŒไธ€็•ช็ด ็›ดใ€‚

includes() ใฏ้…ๅˆ—ใŒๆŒ‡ๅฎšใฎ่ฆ็ด ใ‚’ๅซใ‚€ใ‹ใฉใ†ใ‹่ชฟในใ‚‹ใ‚„ใคใงใ™ใ€‚ ้‡่ค‡ใ—ใฆใชใ‹ใฃใŸใ‚‰่ฟฝๅŠ ใ™ใ‚‹ใ ใ‘ใ€‚

const arr0 = [11, 22, 11, 22, 33];

const arr1 = arr0.reduce((a, v) => {
  if (!a.includes(v)) {
    a.push(v);
  }
  return a;
}, []);

console.log(arr1); // => [ 11, 22, 33 ]

reduce() ใซ่‡ชไฟกใŒใชใ‘ใ‚Œใฐ forEach() ใงใ‚‚ใ€‚

const arr1 = [];
arr0.forEach((v) => {
  if (!arr1.includes(v)) {
    arr1.push(v);
  }
});

some() ใงใ‚„ใ‚‹

Set ใ‚‚ includes() ใ‚‚ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฎๅ ดๅˆใฏๅฎŒๅ…จใซๅŒใ˜ใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใงใชใ„ใจๅๅฟœใ—ใชใ„ใฎใงใ€ใใฎๅ ดๅˆใฏ some() ใŒใ‚ˆใ‚ใ—ใ„ใ‹ใจใ€‚

ใ‚‚ใฃใจ่‡ช็”ฑๅบฆใŒ้ซ˜ใ„ใ€‚

const arr0 = [
  { id: '11', num: 1 },
  { id: '22', num: 2 },
  { id: '11', num: 3 },
  { id: '22', num: 4 },
  { id: '33', num: 5 },
];

const arr1 = arr0.reduce((a, v) => {
  if (!a.some((e) => e.id === v.id)) {
    a.push(v);
  }
  return a;
}, []);

console.log(arr1);
// [ { id: '11', num: 1 },
//   { id: '22', num: 2 },
//   { id: '33', num: 5 } ]

้‡่ค‡ๅˆ†ใฏๅ…ˆใซๅ‡บใฆใใ‚‹ใ‚„ใคใŒๅ„ชๅ…ˆใงใ™ใ€‚

Map ใ‚’ไฝฟใ†

ใ“ใ‚Œใ‚‚ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใซๅฏพๅฟœใ€‚ๅˆ่ฆ‹ใงใ€ŒใŽใ‚‡ใˆใƒผใ€ใฆใชใ‚Šใใ†ใ€‚

const arr0 = [
  { id: '11', num: 1 },
  { id: '22', num: 2 },
  { id: '11', num: 3 },
  { id: '22', num: 4 },
  { id: '33', num: 5 },
];

const arr1 = [...new Map(arr0.map((v) => [v.id, v])).values()];

console.log(arr1);
// [ { id: '11', num: 3 },
//   { id: '22', num: 4 },
//   { id: '33', num: 5 } ]

ไป•็ต„ใฟใฏ Set ใจ some() ใฎ็ต„ใฟๅˆใ‚ใ›ใงใ™ใ€ใ ใ„ใŸใ„ใ€‚

  1. map() ใงIDใจใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆๆœฌไฝ“ใฎ็ต„ใฟๅˆใ‚ใ›ใธๅค‰ๆ›
  2. ็ต„ใฟๅˆใ‚ใ›ใ‚’ๅ…ƒใซ Map ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใ‚’ไฝœๆˆใ€‚ใ“ใ“ใงID๏ผˆ Map ใฎใ‚ญใƒผ๏ผ‰ใŒ้‡่ค‡ใ™ใ‚‹ใ‚‚ใฎใฏๆŽ’้™ค๏ผ‰
  3. values() ใงใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆ๏ผˆ Map ใฎๅ€ค๏ผ‰ใฎใฟใฎๅๅพฉๅญใ‚’ๅพ—ใ‚‹
  4. ใ‚นใƒ—ใƒฌใƒƒใƒ‰ๆง‹ๆ–‡ ... ใ‚’ไผดใ†้…ๅˆ—ๅˆๆœŸๅŒ–ๅญ [] ใง้…ๅˆ—ใซใ€‚ๅฎŒๆˆ

้‡่ค‡ๅˆ†ใฏๅพŒใ‚ใซใ‚ใ‚‹ใ‚„ใคใŒๅ„ชๅ…ˆ๏ผˆไธŠๆ›ธใ๏ผ‰ใงใ™ใ€‚

ใŠใ—ใพใ„

ใชใ‚“ใ‹่‰ฏใ„ใฎใ‚ใ‚‹๏ผŸ

ๅ‚่€ƒ