在 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。
js ES6 中,基于 gameName 的唯一性来提取每个不同 gameName 的第一个 sid
于 2024-06-26 17:21:25 首次发布