代码之家  ›  专栏  ›  技术社区  ›  Hozoa glee

节点。JS使用lodash将子对象添加到对象

  •  0
  • Hozoa glee  · 技术社区  · 7 年前

    我有一个如下所示的对象:

    [{
         "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"
     }]
    

    我想将其与具有唯一 kanji part 并移除重复零件。我希望它返回如下结果

    {
        "kanji": ["ç±²", "é¾¥"],
        "part": ["一", "|", "亅", "个", "ハ", "冂", "口", "目", "冊", "竹", "貝", "頁", "龠", "廾"]
    }
    

    如何使用 lodash 这样做?

    3 回复  |  直到 7 年前
        1
  •  1
  •   Hassan Imam Ravi kant    7 年前

    您可以使用 map 具有 uniq 获取对象中的所有唯一值。

    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>
        2
  •  0
  •   klugjo    7 年前

    您可以使用 flatMap 获取kanjis和零件的展平阵列。然后使用uniq仅保留唯一元素:

    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>
        3
  •  0
  •   Narendra Jadhav    7 年前

    您还可以使用 reduce() 以及 spread operator ,您可以达到所需的结果。

    演示

    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);