猿问

如何将多个元素移动到数组的开头?

我有一个将数组和字符串作为参数的函数。任务是检查字符串是否出现在函数内,以及是否移到数组的第一个位置。

function moveToFirstPlace(['pizza', 'Pasta', 'Burger', 'PiZZa', 'pizzA'],'pizza')

在这个例子中,无论大写还是小写,所有比萨都必须移动到数组的开头。


慕勒3428872
浏览 165回答 3
3回答

慕盖茨4494581

您可以对数组进行排序并检查值并将这些值移到顶部。function moveToFirstPlace(array, value) {    return array.sort((a, b) => (b.toLowerCase() === value) - (a.toLowerCase() === value));}console.log(moveToFirstPlace(['pizza', 'Pasta', 'Burger', 'PiZZa', 'pizzA'],'pizza'));

肥皂起泡泡

执行此操作的一种方法是应用于filter您的数组,一次用于识别匹配项,一次用于非匹配项。然后只需连接两个结果:function moveToFirstPlace(arr, str) {    str = str.toLowerCase();    const matches = arr.filter(elem => elem.toLowerCase() === str);    const misses = arr.filter(elem => elem.toLowerCase() !== str);    return matches.concat(misses);}var arr = moveToFirstPlace(['pizza', 'Pasta', 'Burger', 'PiZZa', 'pizzA'],'pizza');console.log(arr);这将保持匹配元素的原始顺序。请注意,它不会改变原始数组,而是返回一个新数组作为结果。您还可以使用更实用的方法reduce:function moveToFirstPlace(arr, str) {    str = str.toLowerCase();    return arr.reduce((acc, elem) => (acc[+(elem.toLowerCase() === str)].push(elem), acc), [[], []])              .reduce((a, b) => a.concat(b));}var arr = moveToFirstPlace(['pizza', 'Pasta', 'Burger', 'PiZZa', 'pizzA'],'pizza');console.log(arr);两种解决方案都具有线性时间复杂度。

慕后森

您可以使用push,并unshift伴随着toLowerCase()建立一个新的阵列。function moveToFirstPlace(items, key) {  let result = []  items.forEach(itm => {    itm.toLowerCase() == key.toLowerCase() ? result.unshift(itm) : result.push(itm)  })  return result}console.log(moveToFirstPlace(['pizza', 'Pasta', 'Burger', 'PiZZa', 'pizzA'], 'pizza'))
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答