Превратите метод ES6 find () во что-то в ES5 - PullRequest
0 голосов
/ 11 октября 2019

Мне нужно объединить значения двух массивов объектов и сделать из них третий. Я использую метод 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 } ] 

1 Ответ

0 голосов
/ 11 октября 2019

Polyfilling find тривиально, смотрите ссылку на один такой полифилл, но есть и другие.

Вы не можете использовать indexOf, потому что он ищет вещьна самом деле в массиве, и вы хотите, чтобы соответствовать id. (Вы можете использовать findIndex, но это также не метод ES5.)

Если вы не хотите многократного заполнения, вам понадобится простой цикл for, break, когда вы найдетезапись с соответствующим id.

...