I want to find the common elements of multiple array of objects based on a common property. In addition, if an element appears more than once, I want the resulting array to reflect the number of times it occurs in all the arrays.
I tried the following:
var arr = [ [ { name: 'kiwi', value: 12 }, { name: 'apple', value: 5 }, { name: 'apple', value: 12 }, { name: 'pizza', value: 33 }, { name: 'pizza', value: 24 }, { name: 'fish', value: 5 }, { name: 'milk', value: 5 }, { name: 'banana', value: 7 }, { name: 'orange', value: 11 }, ], [ { name: 'taco', value: 23 }, { name: 'pizza', value: 78 }, { name: 'apple', value: 12 }, { name: 'pizza', value: 33 }, { name: 'pizza', value: 24 }, { name: 'fish', value: 5 }, { name: 'pie', value: 1 }, { name: 'cake', value: 3 }, { name: 'banana', value: 7 }, { name: 'beef', value: 123 }, { name: 'lime', value: 72 }, { name: 'pizza', value: 34 }, ], [ { name: 'apple', value: 12 }, { name: 'pizza', value: 33 }, { name: 'pizza', value: 24 }, { name: 'pizza', value: 23 }, { name: 'fish', value: 5 }, { name: 'banana', value: 7 }, { name: 'banana', value: 77 }, ] ]; function findArraysWithCommonName(arr) { let arrays = [...arr]; var result = arrays.shift().reduce(function(res, v) { if (arrays.every(function(a) { return (a.filter(function(e) { return e.name === v.name }).length > 0); })) res.push(v); return res; }, []); return result; } console.log(findArraysWithCommonName(arr)) The result I got is:
[ {name: "apple", value: 5}, {name: "apple", value: 12}, {name: "pizza", value: 33}, {name: "pizza", value: 24}, {name: "fish", value: 5}, {name: "banana", value: 7} ] I expect the output to be:
[ {name: "apple", value: 12}, {name: "pizza", value: 33}, {name: "pizza", value: 24}, {name: "fish", value: 5}, {name: "banana", value: 7} ] or
[ {name: "apple", value: 5}, {name: "pizza", value: 33}, {name: "pizza", value: 24}, {name: "fish", value: 5}, {name: "banana", value: 7} ]
{name: "apple", value: 5}as a possible output?{name: "apple", value: 5}only occurs once. (or, why isn't{name: "apple", value: 12}present in the second possible output array?{name: "apple", value: 12}occurs in every array)appleobject in each array is, at most, 1, whereas for pizza, that number is 2