如何编写函数合并数组中所有对象的keywords为单个数组?
合并所有对象的keywords数组的解决方案
嘿,这个问题很好解决,完全不用手动逐个执行concat操作——毕竟手动拼接不仅繁琐,还没法应对data数组中对象的增删变化。这里有两种简洁又靠谱的方法,不管data里的对象怎么变,函数都能自动处理:
方法一:使用Array.reduce()
reduce方法可以遍历整个data数组,逐步将每个对象的keywords拼接到累加数组中,初始值设为空数组即可:
function mergeKeywords(data) { // 遍历data,将每个item的keywords拼接到累加器acc里 return data.reduce((acc, item) => acc.concat(item.keywords), []); }
方法二:使用Array.flatMap()(更简洁)
flatMap是map+flat的组合,先把每个对象映射为它的keywords数组,再自动将这些数组扁平化一层,直接得到合并后的结果:
function mergeKeywords(data) { return data.flatMap(item => item.keywords); }
测试示例
把你的data传入函数,就能得到合并后的数组:
var data = [ { Name: "HR", popularity: 91, keywords: ["bat", "happy", "success"] }, { Name: "biz", popularity: 3, keywords: ["sad", "code", "shady"] }, { Name: "xyz", popularity: 80, keywords: ["alphabetical", "code", "trendy"] }, { Name: "catty", popularity: 536, keywords: ["code", "startup", "cats"] } ]; console.log(mergeKeywords(data)); // 输出结果:["bat", "happy", "success", "sad", "code", "shady", "alphabetical", "code", "trendy", "code", "startup", "cats"]
额外补充(可选)
如果需要合并后去除重复的关键词,可以在结果外层套一个Set来实现:
function mergeUniqueKeywords(data) { return [...new Set(data.flatMap(item => item.keywords))]; }
内容的提问来源于stack exchange,提问作者seannyc7
相关产品推荐
相关产品推荐

