微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用_underscoreJS从字符串对象数组中删除重复项

如何解决如何使用_underscoreJS从字符串对象数组中删除重复项

我有这张桌子

[
    "PC","ps3,XBox 360,PC,PS4,XBox One,Nintendo Switch","PC,"PS4,PC",PS5,Nintendo Switch,XBox One",Android"
]

我想删除重复的项目并得到这个结果:

["ps3,Android"]

我用下划线 js 尝试了这个,但它给出了空数组:

 data = _.chain(games)
        .groupBy('platforms')
        .map((value,key) => { return key })
        
    
    return data

json 数据:https://jsoneditoronline.org/#left=cloud.3b82169327044c04b7207fa186aee85b&right=local.tiniqu

解决方法

const a = [
  'PC','PS3,Xbox 360,PC,PS4,Xbox One,Nintendo Switch','PC,'PS4,PC',PS5,Nintendo Switch,Xbox One',Android'
];

const result = _.chain(a)
  .map(s => s.split(','))
  .flatten()
  .uniq()
  .value()
  .join(',');

console.log([result]);
<script src="https://cdn.jsdelivr.net/npm/underscore@1.13.1/underscore-umd-min.js"></script>

,

您可以使用 Array.map 对数组进行分组,使用 Array.flat 对数组进行边距调整,以及使用 Set 删除重复项。

let input1 = ["PC","PS3,Nintendo Switch","PC,"PS4,PC",Xbox One",Android"];
let input2 = { "data": [{ "userId": 8,"game": "League of legends","playTime": 500,"genre": "MOBA","platforms": ["PC"] },{ "userId": 7,"game": "World of warcraft","playTime": 1500,"genre": "MMORPG",{ "userId": 88,"game": "Dark Souls","playTime": 109,"genre": "Action RPG","platforms": ["PS3","Xbox 360","PC","PS4","Xbox One","Nintendo Switch"] },"game": "The Witcher 3: Wild Hunt","playTime": 9,"genre": "RPG","platforms": ["PC",{ "userId": 1,"game": "The last of us 2","playTime": 100,"genre": "FPS","platforms": ["PS4","PC"] },"game": "Hitman 3","playTime": 60,"genre": "Stealth","PS5","Nintendo Switch",{ "userId": 99,"game": "Minecraft","playTime": 1002,"genre": "Sandbox","game": "Hearthstone","playTime": 1000,"genre": "Card Game","game": "FIFA","playTime": 2000,"genre": "Sport","Xbox One"] },{ "userId": 2,"playTime": 78,{ "userId": 47,"playTime": 850,"game": "Among Us","playTime": 5000,"genre": "Multiplayer","Android"] },"game": "Valorant",{ "userId": 9,"playTime": 80,"playTime": 900,{ "userId": 24,"playTime": 300,"playTime": 800,{ "userId": 54,"playTime": 231,"playTime": 777,"playTime": 90,"PC"] }] }

let removeDuplicate = (array,procedure) => [...new Set(array.map(procedure).flat())];

let result1 = removeDuplicate(input1,item => item.split(","));
let result2 = removeDuplicate(input2.data,({ platforms }) => platforms);

console.log({ result1,result2 });

,

我相信首先要做的就是像这样规范化你的数组......

const array = [
    "PC",Android"
]

let arrayNormalized = []

array.every(item => {
  const arrayFromItem = item.split(',')
  arrayNormalizad = [...arrayNormalizad,...arrayFromItem]
})

之后,你可以使用_js中的函数uniq

arrayNormalized = _.uniq(arrayNormalizad)
,

您不需要使用下划线或任何函数式数组方法来完成此操作

Array.from(new Set(array.join(',').split(',')));
// ["PC","PS3","Android"]

此代码

  1. 使用 , 分隔符连接所有行
  2. 然后通过 ,
  3. 将所有内容拆分为一系列标题
  4. 将所有内容放在 Set 下删除重复项
  5. Array.from 将集合数据移回数组

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。