【问题标题】:How to remove duplicates form object of arrays [duplicate]如何从数组对象中删除重复项[重复]
【发布时间】:2022-12-05 15:55:46
【问题描述】:

我正在尝试删除对象中存在的重复形式的数组列表,对象如下所示,例如,我只使用两个数组,但我正在查看的实际数组中有很多

{
    "NAME":[
        "LORD",
        "OF",
        "RINGS",
        "LORD"
    ],
    "ADRESS":[
        "INDIA",
        "INDIA",
        "TEXAS",
        "SRILANKA"
    ]
}

预期输出:

{
    "NAME":[
        "LORD",
        "OF",
        "RINGS"
    ],
    "ADRESS":[
        "INDIA",
        "TEXAS",
        "SRILANKA"
    ]
}

目前我能够从对象中提取一个数组,并且能够使用下面的“SET”删除重复项是我的代码

console.log("without duplicates", [... new Set(r.NAME)]);

因为它是一个对象,所以我确定我不能对此进行循环。我怎样才能达到预期的输出,谢谢

【问题讨论】:

  • 你可以循环一个对象。有很多方法可以循环一个对象。
  • "INIDA" 怎么了?
  • 我确实更新了两次实际上是“INDIA”,谢谢
  • here how to loop through an object 并且由于您已经知道如何删除重复项,所以这对您来说应该是小菜一碟。
  • @Layhout,谢谢

标签: javascript object


【解决方案1】:

您可以遍历对象键,然后使用 Set 删除重复项,如下所示:

    function removeDuplicates(obj): any {
        for (const key of Object.keys(obj)) {
            obj[key] = [...new Set(obj[key])];
        }
        return obj;
    }

【讨论】:

    【解决方案2】:

    遍历对象中的每个键值对。 对于每个值(它是一个数组),使用 filter() 方法删除任何重复项。 将过滤后的数组保存回对象。 这是一个例子:

       const obj = {
        NAME: ["LORD", "OF", "RINGS", "LORD"],
        ADDRESS: ["INDIA", "INIDA", "TEXAS", "SRILANKA"]
    };
    
    // Loop through each key-value pair in the object
    for (const [key, value] of Object.entries(obj)) {
        // Use the filter() method to remove any duplicates
        const filteredArray = value.filter((item, index) => value.indexOf(item) === index);
        // Save the filtered array back to the object
        obj[key] = filteredArray;
    }
    
    console.log(obj); // { NAME: ["LORD", "OF", "RINGS"], ADDRESS: ["INDIA", "TEXAS", "SRILANKA"] }
    

    在上面的示例中,我们首先使用 Object.entries() 遍历 obj 对象中的每个键值对。对于每个值(它是一个数组),我们使用 filter() 方法删除任何重复项。 filter() 方法接受一个为数组中的每个元素调用的回调函数。在回调中,我们使用 indexOf() 方法检查当前元素是否是该元素在数组中的第一次出现。如果当前元素是第一次出现,我们返回 true 并且该元素包含在过滤后的数组中。否则,我们返回 false 并且不包含该元素。最后,我们使用键将过滤后的数组保存回对象。

    您可以使用这种方法从对象的数组中删除重复项。

    const obj = {
      NAME: ["LORD", "OF", "RINGS", "LORD"],
      ADDRESS: ["INDIA", "INIDA", "TEXAS", "SRILANKA"]
    };
    
    // Loop through each key-value pair in the object
    for (const [key, value] of Object.entries(obj)) {
      // Use the filter() method to remove any duplicates
      const filteredArray = value.filter((item, index) => value.indexOf(item) === index);
      // Save the filtered array back to the object
      obj[key] = filteredArray;
    }
    
    console.log(obj); // { NAME: ["LORD", "OF", "RINGS"], ADDRESS: ["INDIA", "TEXAS", "SRILANKA"] }

    【讨论】:

      【解决方案3】:
          const obj = {
            NAME: ["LORD", "OF", "RINGS", "LORD"],
            ADDRESS: ["INDIA", "INDIA", "TEXAS", "SRILANKA"]
          };
      //get array of keys
      const keys = Object.keys(obj);
      
      //then map to transform the object array
      const sets = keys.map(key => new Set(obj[key]));
      
      //set back to array
      keys.forEach((key, i) => {
        obj[key] = [...sets[i]];
      });
      
      console.log(obj);
      

      【讨论】:

        【解决方案4】:

        我们可以使用Set来删除重复项

        let data = {
           "NAME":[
              "LORD",
              "OF",
              "RINGS",
              "LORD"
           ],
           "ADRESS":[
              "INDIA",
              "INDIA",
              "TEXAS",
              "SRILANKA"
           ]
        }
        
        Object.keys(data).forEach(k => {
          data[k] = [...new Set(data[k])]
        })
        
        console.log(data)

        【讨论】:

          【解决方案5】:

          这条路怎么样?

          const originDatas = {
            "NAME":[
              "LORD",
              "OF",
              "RINGS",
              "LORD",
            ],
            "ADRESS":[
              "INDIA",
              "INIDA",
              "TEXAS",
              "SRILANKA",
            ],
          };
          
          const setDatas = {};
          
          Object.keys(originDatas).map((key) => {
            setDatas[key] = [...new Set(originDatas[key])];
          });
          
          console.log(setDatas);

          【讨论】:

            猜你喜欢
            • 2017-04-10
            • 2019-02-28
            • 1970-01-01
            • 1970-01-01
            • 2016-03-12
            相关资源
            最近更新 更多