javascript - Slå samman arrayer till en array efter filtrering
Jag har en array med objekt, där jag endast tar locations-arrayen. Mitt mål är att slå samman dessa locations-arrayer till en array, men jag lyckas inte göra det och får en tom array. Så här gör jag:
let results = [{
id: '1',
locations: ['aaaa', 'bbbbbb', 'cccccc']
},
{
id: '2',
locations: []
},
{
id: '3',
locations: ['ddd', 'aaadsad', 'sefd']
},
{
id: '4',
locations: ['ffff', 'eeee', 'sfdsfsd']
},
];
const locationIds = [].concat.apply([], ...results.filter(s => s.locations && s.locations.length > 0).map(({
locations
}) => ({
locations
})));
console.log(locationIds);vad gör jag fel här? Resultatet borde vara ['aaaa', 'bbbbbb', 'cccccc', 'ddd', 'aaadsad', 'sefd', 'ffff', 'eeee', 'sfdsfsd'];
Svar #1
Du behöver inte filter här. Använd bara map-metoden genom att skicka en callback-anges funktion som tillämpas på varje objekt i arrayen.
let results = [{ id: '1', locations: ['aaaa', 'bbbbbb', 'cccccc'] }, { id: '2', locations: [] }, { id: '3', locations: ['ddd', 'aaadsad', 'sefd'] }, { id: '4', locations: ['ffff', 'eeee', 'sfdsfsd'] }, ];
const locationIds = [].concat(...results.map(s => s.locations));
console.log(locationIds);Svar #2
Du kan prova med flatMap():
Metoden
flatMap()mappar först varje element med en mappingsfunktion och plattar sedan ut resultatet till en ny array. Den är identisk med enmap()följt av enflat()med djup 1, menflatMap()är ofta ganska användbar, eftersom det att slå ihop båda till en metod är något mer effektivt.
let results = [{
id: '1',
locations: ['aaaa', 'bbbbbb', 'cccccc']
},
{
id: '2',
locations: []
},
{
id: '3',
locations: ['ddd', 'aaadsad', 'sefd']
},
{
id: '4',
locations: ['ffff', 'eeee', 'sfdsfsd']
},
];
const locationIds = results.flatMap(i => i.locations);
console.log(locationIds);