I'm trying to create an array from two other arrays using a loop, where in both arrays I compare two strings and when I find two strings that are the same I push the value to the array from second compared array, and if I don't find it I push 0. The problem is that the array has to be exactly the length of the first array.
const array1 = ['21', '22', '23', '24', '25', '26', '27']
const array2 = [{score: 1, date: '21'}, {score: 3, date: '23'} ]
output should look like this: [1, 0, 3, 0, 0, 0, 0]
<=== this array must have length of array1, and i have problem to create proper loop, or maybe this is shouldnt be loop?
CodePudding user response:
You can achieve this by combining map()
(to iterate over the first array) and find()
(to get the right score out of the second array). To fall back to 0
in case there is no result in array2
, you can combine optional chaining with nullish coalescing.
const array1 = ['21', '22', '23', '24', '25', '26', '27'];
const array2 = [{score: 1, date: '21'}, {score: 3, date: '23'} ];
const array3 = array1.map(value => array2.find(obj => obj.date === value)?.score ?? 0);
console.log(array3);