-1

我需要连接 2 个对象数组的值并从中制作第三个。我使用 es6 方法 find() 来制作它,但有人问我一些 es5 代码来了解这段逻辑。我想使用 indexOf() 但不幸的是我不知道如何制作它......

感谢您的帮助。

const caByEmployee = [{
        id: 8,
        period1: 652.40,
        period2: 3831.73,
        name: 'Tam'
    },
    {
        id: 18,
        period1: 421.95,
        period2: 1036.18,
        name: 'Nathalie'
    },
    {
        id: 20,
        period1: 300.5,
        period2: 1179.15,
        name: 'Liliane'
    }
]

const attendanceByEmployee = [{
         id : 1,
         period1 : 0,
         period2 : 86
    },
    {
         id : 8,
         period1 : 98,
         period2 : 520
    },
    {
         id : 18,
         period1 : 70,
         period2 : 49
    },
    {
         id : 20,
         period1 : 4,
         period2 : 227
    }
]

const averageCartByEmployee = caByEmployee.map(function (ca) {
    var attendance = attendanceByEmployee.find(function (attendance) {
        return attendance.id === ca.id;
    });

    return {
        id     : ca.id,
        name   : ca.name,
        period1: ca.period1 / attendance.period1 || 0,
        period2: ca.period2 / attendance.period2 || 0
    };
});

这给出了这样的结果,这完全没问题,但不是用 es5 制作的

[ { id: 8, 
    name: 'Tam', 
    period1: 6.657142857142857, 
    period2: 7.368711538461539 }, 
  { id: 18, 
    name: 'Nathalie', 
    period1: 6.027857142857143, 
    period2: 21.1465306122449 }, 
  { id: 20, 
    name: 'Liliane', 
    period1: 75.125, 
    period2: 5.194493392070485 } ] 
4

1 回答 1

0

Polyfillingfind是微不足道的,请参阅其中一种 polyfill 的链接,但还有其他的。

您不能使用indexOf,因为它会在数组中查找实际的东西,并且您想通过id. (你可以使用findIndex,但它也不是 ES5 方法。)

如果你不想 polyfill,你会想要一个简单的for循环,break当你找到一个匹配的条目时id

于 2019-10-11T08:40:33.780 回答