数组搜索与重组:如何将指定元素前置生成目标数组
实现数组重新排序:优先展示搜索匹配元素
嘿,我来帮你搞定这个数组排序的问题!首先得明确你的核心需求:把searchArray里的元素放在新数组最前面,紧接着排列mainArray里剩下的元素。先说说你原来代码的问题——不仅有语法错误(箭头函数里不能直接那样声明变量),逻辑也不对:每次找到匹配项就把整个mainArray展开再加匹配项,这只会生成重复混乱的数组,肯定达不到预期效果。
下面给你两种靠谱的实现方案:
方法一:直观的过滤拼接(适合小型数组)
这种方法逻辑简单易懂,直接把匹配元素和剩余元素分开后拼接:
var mainArray = ['Adam', 'Bailey', 'Cathy', 'Dave', 'Earl', 'Fernando', 'Gary', 'Harper']; var searchArray = ['Fernando', 'Harper']; // 先提取searchArray中确实存在于mainArray的元素(避免searchArray包含主数组没有的项) const matchedItems = searchArray.filter(name => mainArray.includes(name)); // 过滤出mainArray中不在searchArray里的剩余元素 const remainingItems = mainArray.filter(name => !searchArray.includes(name)); // 拼接得到最终数组 const newArrAfterSearch = [...matchedItems, ...remainingItems]; console.log(newArrAfterSearch); // 输出结果:['Fernando', 'Harper', 'Adam', 'Bailey', 'Cathy', 'Dave', 'Earl', 'Gary']
方法二:用Set优化性能(适合大数据量场景)
如果你的数组元素很多,includes方法每次查找都是O(n)的时间复杂度,换成Set的has方法(O(1))会更高效:
var mainArray = ['Adam', 'Bailey', 'Cathy', 'Dave', 'Earl', 'Fernando', 'Gary', 'Harper']; var searchArray = ['Fernando', 'Harper']; // 将searchArray转为Set,提升查找速度 const searchSet = new Set(searchArray); const matchedItems = []; const remainingItems = []; // 遍历主数组,分离匹配项和剩余项 mainArray.forEach(name => { searchSet.has(name) ? matchedItems.push(name) : remainingItems.push(name); }); // 注意:如果需要严格遵循searchArray的顺序,而不是mainArray中匹配项的出现顺序,就用方法一的matchedItems逻辑 const newArrAfterSearch = [...searchArray.filter(name => mainArray.includes(name)), ...remainingItems]; console.log(newArrAfterSearch);
这样就能完美得到你想要的新数组啦!
内容的提问来源于stack exchange,提问作者Uzair Khan
相关产品推荐
相关产品推荐

