使用两个对象进行Javascript数组排序(noob)

时间:2018-04-03 23:19:59

标签: javascript arrays sorting search replace

所以我有一个包含两个这样的对象的数组:

Array(4)
0:{Activity: "Skiing", Duration: 74}
1:{Activity: "Strength training", Duration: 64}
2:{Activity: "Cycling", Duration: 64}
3:{Activity: "Running", Duration: 43}

输入来自用户,该用户从四个不同的活动中选择一个,然后写下锻炼持续的时间。

我想做的是以对“持续时间”求和而不是制作新数组元素的方式对它们进行排序。

因此,如果用户输入“活动”和“持续时间”,则阵列将找到正确的活动并增加持续时间以给出总持续时间。 例如,如果

“活动”:“滑雪”,“持续时间”= 10

将持续时间更新为“84”

Array(4)
0:{Activity: "Skiing", Duration: 84}
1:{Activity: "Strength training", Duration: 64}
2:{Activity: "Cycling", Duration: 64}
3:{Activity: "Running", Duration: 43}

如果有人能帮助我,我会非常感激。

2 个答案:

答案 0 :(得分:1)

使用.find然后更新找到的对象:

const arr = [
  {Activity: "Skiing", Duration: 74},
  {Activity: "Strength training", Duration: 64},
  {Activity: "Cycling", Duration: 64},
  {Activity: "Running", Duration: 43},
];

const inputActivity = 'Cycling';
const inputDuration = 33;
const foundObj = arr.find(({ Activity }) => Activity === inputActivity);
if (foundObj) foundObj.Duration += inputDuration;
console.log(arr);

答案 1 :(得分:0)

let arr =
[
    {Activity: "Skiing", Duration: 74},
    {Activity: "Strength training", Duration: 64},
    {Activity: "Cycling", Duration: 64},
    {Activity: "Running", Duration: 43}
];

let input = {
    Activity: "Skiing",
    Duration: 12
};

arr = arr.filter(
    x => {
        if(x.Activity === input.Activity)
            x.Duration += input.Duration;

        return x;
    }
);

console.log(arr);