Javascript 创建一个数组对象及其对应的优胜者
假设我有一个数组:Javascript 创建一个数组对象及其对应的优胜者,javascript,arrays,Javascript,Arrays,假设我有一个数组: let array = [ { win: "Ali", loser: "Jake"}, { win: "carl", loser: "Dean"}, { win: "Eli", loser: "Jake"}, { win: "Eli", loser: "carl"}, { win: "Ali", loser: "carl"}, { win: "carl", loser: "Dean"}, { win: "Dean", loser: "Eli"} ]
let array = [
{ win: "Ali", loser: "Jake"},
{ win: "carl", loser: "Dean"},
{ win: "Eli", loser: "Jake"},
{ win: "Eli", loser: "carl"},
{ win: "Ali", loser: "carl"},
{ win: "carl", loser: "Dean"},
{ win: "Dean", loser: "Eli"}
];
输出应为:
{
'Ali': ['Jake', 'carl'],
'Jake': [],
'carl': ['Dean'],
'Dean': ['eli'],
'eli': ['Jake', 'carl'],
}
因此,我的第一步是创建一个对象内部所有优胜者的空数组。然后将赢家的每个元素与其对应的输家推到一起。但是我有点迷路了。
我所拥有的:
function winner(array) {
let newObj = {};
for (let obj of array) {
newObj[obj.winner] = [];
}
}
我的解决方案:
function winner(array) {
let result = {};
for (let obj of array) {
result[obj.winner] = [];
result[obj.loser] = [];
}
for (let obj of array) {
if (!result[obj.winner].includes(obj.loser)) {
result[obj.winner].push(obj.loser);
}
}
return result;
}
我的解决方案:
function winner(array) {
let result = {};
for (let obj of array) {
result[obj.winner] = [];
result[obj.loser] = [];
}
for (let obj of array) {
if (!result[obj.winner].includes(obj.loser)) {
result[obj.winner].push(obj.loser);
}
}
return result;
}
您可以通过将一个对象作为结果集并为胜利者和失败者构建一个新属性来减少数组。将输家添加到赢家数组
var数组=[{win:“阿里”,失败者:“杰克”},{win:“卡尔”,失败者:“迪安”},{win:“伊莱”,失败者:“卡尔”},{win:“阿里”,失败者:“卡尔”},{win:“卡尔”,失败者:“迪安”},{win:“迪安”,失败者:“伊莱”},
赢家=数组。减少((r,{win,loser})=>{
(r[win]=r[win]| |[])。推(失败者);
r[失败者]=r[失败者]| |[];
返回r;
},Object.create(null));
console.log(获胜者)代码>
.as console wrapper{max height:100%!important;top:0;}
您可以通过将一个对象作为结果集并为胜利者和失败者构建一个新属性来减少数组。将输家添加到赢家数组
var数组=[{win:“阿里”,失败者:“杰克”},{win:“卡尔”,失败者:“迪安”},{win:“伊莱”,失败者:“卡尔”},{win:“阿里”,失败者:“卡尔”},{win:“卡尔”,失败者:“迪安”},{win:“迪安”,失败者:“伊莱”},
赢家=数组。减少((r,{win,loser})=>{
(r[win]=r[win]| |[])。推(失败者);
r[失败者]=r[失败者]| |[];
返回r;
},Object.create(null));
console.log(获胜者)代码>
.as控制台包装{最大高度:100%!重要;顶部:0;}
非常简单:
让记分板=[
{获胜者:“阿里”,失败者:“杰克”},
{获胜者:“卡尔”,失败者:“迪安”},
{获胜者:“伊莱”,失败者:“杰克”},
{获胜者:“伊莱”,失败者:“卡尔”},
{获胜者:“阿里”,失败者:“卡尔”},
{获胜者:“卡尔”,失败者:“迪安”},
{获胜者:“院长”,失败者:“伊莱”}
];
让胜利者={};
记分牌。forEach(竞赛=>{
如果(!优胜者[竞赛.优胜者])
优胜者[竞赛.优胜者]=[];
胜利者[竞赛。胜利者]。推(竞赛。失败者);
});
附言:我添加了一行以防止重复失败,但我认为这不是很合乎逻辑
PPS:我不会为没有赢得比赛的玩家创建赢家条目,但如果这也是你想要的,我猜这个数据表示法不正确。非常简单:
让记分板=[
{获胜者:“阿里”,失败者:“杰克”},
{获胜者:“卡尔”,失败者:“迪安”},
{获胜者:“伊莱”,失败者:“杰克”},
{获胜者:“伊莱”,失败者:“卡尔”},
{获胜者:“阿里”,失败者:“卡尔”},
{获胜者:“卡尔”,失败者:“迪安”},
{获胜者:“院长”,失败者:“伊莱”}
];
让胜利者={};
记分牌。forEach(竞赛=>{
如果(!优胜者[竞赛.优胜者])
优胜者[竞赛.优胜者]=[];
胜利者[竞赛。胜利者]。推(竞赛。失败者);
});
附言:我添加了一行以防止重复失败,但我认为这不是很合乎逻辑
PPS:我不会为没有赢得比赛的玩家创建赢家条目,但如果这也是你想要的,我猜这个数据表示法不正确。你能解释一下输入是如何转化为输出的吗?这个过程不是很清楚,你能明确你的代码应该做什么吗?您是如何确定阵列的输出的?不清楚。为什么输出中的Ali
数组中包含carl
?(阿里在输入中没有赢得卡尔)@CertainPerformance你说得对。我修正了输出。@inavda是的。修正了。你能解释一下输入是如何转化为输出的吗?这个过程不是很清楚,你能明确你的代码应该做什么吗?您是如何确定阵列的输出的?不清楚。为什么输出中的Ali
数组中包含carl
?(阿里在输入中没有赢得卡尔)@CertainPerformance你说得对。我修正了输出。@inavda是的。修好了。