js ES6 中,基于 gameName 的唯一性来提取每个不同 gameName 的第一个 sid

在 ES6 中,如果你想要基于 gameName 的唯一性来提取每个不同 gameName 的第一个 sid,你可以使用 Array.prototype.reduce() 方法来创建一个新的对象,其中每个 gameName 是键,而对应的第一个 sid 是值。之后,你可以从这个对象中提取所有的 sid 到一个数组中。

下面是如何实现这个逻辑的示例代码:
let arr = [
  {sid: '111', gameName: '自由定点'},
  {sid: '111', gameName: '自由定点'},
  {sid: '111', gameName: '自由定点'},
  {sid: '222', gameName: '非定点'},
  {sid: '222', gameName: '非定点'},
  {sid: '333', gameName: '天晴了'},
];

// 使用 reduce 方法创建一个对象,其中 gameName 是键,sid 是值(只保留第一个)
let sidMap = arr.reduce((acc, item) => {
  if (!acc[item.gameName]) {
    acc[item.gameName] = item.sid;
  }
  return acc;
}, {});

// 从 sidMap 中提取所有的 sid 到一个数组中
let sidList = Object.values(sidMap);

console.log(sidList); // 输出: ['111', '222', '333']
在上面的代码中,reduce 方法遍历 arr 数组,对于每个元素,它检查 sidMap 对象中是否已经存在当前 gameName 作为键。如果不存在,它就在 sidMap 中添加一个新的键值对,键是 gameName,值是 sid。如果 gameName 已经存在,那么它就不会更新 sidMap 中的值(因为我们只关心第一个 sid)。最后,Object.values(sidMap) 用于从 sidMap 对象中提取所有的值(即 sid)到一个数组中。


换个思路
在ES6中,你可以使用Array.prototype.reduce()方法来遍历数组并基于gameName将对象组合成一个新的数组结构。以下是如何实现的代码:
let arr = [
  {sid: '111', gameName: '自由定点'},
  {sid: '222', gameName: '自由定点'},
  {sid: '333', gameName: '自由定点'},
  {sid: '444', gameName: '非定点'},
  {sid: '555', gameName: '非定点'},
  {sid: '666', gameName: '天晴了'},
];

let sidList = arr.reduce((accumulator, currentValue) => {
  // 检查当前 gameName 是否已经存在于 accumulator 中
  const existingItem = accumulator.find(item => item.gameName === currentValue.gameName);
  if (existingItem) {
    // 如果存在,将 sid 添加到 sids 数组中
    existingItem.sids.push(currentValue.sid);
  } else {
    // 如果不存在,创建一个新的对象并添加到 accumulator 中
    accumulator.push({ gameName: currentValue.gameName, sids: [currentValue.sid] });
  }
  return accumulator;
}, []); // 初始值为空数组

console.log(sidList);
// 输出:
// [
//   { gameName: '自由定点', sids: [ '111', '222', '333' ] },
//   { gameName: '非定点', sids: [ '444', '555' ] },
//   { gameName: '天晴了', sids: [ '666' ] }
// ]
这段代码首先初始化了一个空数组accumulator,然后使用reduce方法遍历原始数组arr。对于arr中的每个对象,它检查accumulator中是否已有一个具有相同gameName的对象。如果有,它将当前对象的sid添加到该对象的sids数组中;如果没有,它将在accumulator中添加一个新的对象,其中包含当前对象的gameName和sid(作为sids数组的第一个元素)。最后,reduce方法返回组合后的数组sidList。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值