I was reading this code as a part of a quest to better understand filter. 1) I don’t understand why the function is not using curly brackets after the statement. 2) I debugged this and saw that if I get rid of the curly brackets AFTER the reduce function closes, instead of having an object I just have prop3 returned. why? (Is this a special technique?)
// this function return the property-value pairs whose values are in acceptedValues
const acceptedValues = ["value1", "value3"]
const myObject = {
prop1: "value1",
prop2: "value2",
prop3: "value3"
}
var filteredObject = Object.keys(myObject).reduce(function(r, e) {
if (acceptedValues.includes(myObject[e])) r[e] = myObject[e] //HERE question 1)
return r;
}, {}) // HERE question 2)
console.log(filteredObject)//--> should be { prop1: 'value1', prop3: 'value3' }
If you mean why are there no curly braces around r[e] = myObject[e], it’s because they are technically not required for a one-line if block.
if (thing) console.log('the thing is true')
// is technically the same as
if (thing) {
console.log('the thing is true');
}
// but many people find the second easier to read
the {} in the reduce function is the initial value. It will be the original value of r in this case.
Thank you.!
Ariel I read the MDN. I got this: initValue is needed if you want your reduce function starting at 0 index.
In this case: the initValue {} is provided to initialize obj (the first parameter of this reduce function)?