J'ai un objet qui ressemble à ceci:

[{
     "id": 3298,
     "kanji": "籲",
     "part": "一 | 亅 个 ハ 冂 口 目 冊 竹 貝 頁 龠 廾",
     "createdAt": "2018-04-16T02:27:33.993Z",
     "updatedAt": "2018-04-16T02:27:33.993Z"
 }, {
     "id": 5801,
     "kanji": "龥",
     "part": "一 | 亅 个 ハ 冂 口 廾 目 冊 貝 頁 龠",
     "createdAt": "2018-04-16T02:27:34.102Z",
     "updatedAt": "2018-04-16T02:27:34.102Z"
 }]

Je voudrais combiner cela avec un tableau qui détient unique les kanji et part et supprimer la partie en double. Je veux qu'il renvoie le résultat comme suit

{
    "kanji": ["籲", "龥"],
    "part": ["一", "|", "亅", "个", "ハ", "冂", "口", "目", "冊", "竹", "貝", "頁", "龠", "廾"]
}

Comment puis-je utiliser le lodash pour le faire?

0
Hozoa glee 16 avril 2018 à 08:59

3 réponses

Meilleure réponse

Vous pouvez utiliser map avec uniq pour obtenir toutes les valeurs uniques d'un objet.

const data = [ { "id": 3298, "kanji": "籲", "part": "一 | 亅 个 ハ 冂 口 目 冊 竹 貝 頁 龠 廾", "createdAt": "2018-04-16T02:27:33.993Z", "updatedAt": "2018-04-16T02:27:33.993Z" }, { "id": 5801, "kanji": "龥", "part": "一 | 亅 个 ハ 冂 口 廾 目 冊 貝 頁 龠", "createdAt": "2018-04-16T02:27:34.102Z","updatedAt": "2018-04-16T02:27:34.102Z" } ];
const result = {
      kanji : _(data).map('kanji').uniq().value(),
      part : _(data).map('part').split(' ').uniq().value()
     };
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>
1
Hassan Imam 16 avril 2018 à 06:13

Vous pouvez également utiliser reduce() et le spread operator, vous pouvez obtenir le résultat souhaité.

DEMO

const arr=[
  {
    "id": 3298,
    "kanji": "籲",
    "part": "一 | 亅 个 ハ 冂 口 目 冊 竹 貝 頁 龠 廾",
    "createdAt": "2018-04-16T02:27:33.993Z",
    "updatedAt": "2018-04-16T02:27:33.993Z"
  },
  {
    "id": 5801,
    "kanji": "龥",
    "part": "一 | 亅 个 ハ 冂 口 廾 目 冊 貝 頁 龠",
    "createdAt": "2018-04-16T02:27:34.102Z",
    "updatedAt": "2018-04-16T02:27:34.102Z"
  }
]

let result= arr.reduce((o,v)=>{
	o.kanji.push(v.kanji);
	o.part=[...o.part,...v.part.split(' ')];
	return o;
},{kanji:[],part:[]});

console.log(result);
1
Narendra Jadhav 16 avril 2018 à 06:20

Vous pouvez utiliser flatMap pour obtenir un tableau aplati pour les kanjis et les pièces. Utilisez ensuite uniq pour ne conserver que des éléments uniques:

const data = [
  {
    "id": 3298,
    "kanji": "籲",
    "part": "一 | 亅 个 ハ 冂 口 目 冊 竹 貝 頁 龠 廾",
    "createdAt": "2018-04-16T02:27:33.993Z",
    "updatedAt": "2018-04-16T02:27:33.993Z"
  },
  {
    "id": 5801,
    "kanji": "龥",
    "part": "一 | 亅 个 ハ 冂 口 廾 目 冊 貝 頁 龠",
    "createdAt": "2018-04-16T02:27:34.102Z",
    "updatedAt": "2018-04-16T02:27:34.102Z"
  }
];

const result = {
  kanji: _.uniq(_.flatMap(data, 'kanji')),
  part: _.uniq(_.flatMap(data, p => p.part.split(' ')))
};

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>
0
klugjo 16 avril 2018 à 06:07