为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕勒3428872 2021-06-16 13:45:31
我有一个将数组和字符串作为参数的函数。任务是检查字符串是否出现在函数内,以及是否移到数组的第一个位置。function moveToFirstPlace(['pizza', 'Pasta', 'Burger', 'PiZZa', 'pizzA'],'pizza')在这个例子中,无论大写还是小写,所有比萨都必须移动到数组的开头。
查看完整描述

3 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

您可以对数组进行排序并检查值并将这些值移到顶部。


function moveToFirstPlace(array, value) {

    return array.sort((a, b) => (b.toLowerCase() === value) - (a.toLowerCase() === value));

}


console.log(moveToFirstPlace(['pizza', 'Pasta', 'Burger', 'PiZZa', 'pizzA'],'pizza'));


查看完整回答
反对 回复 2021-06-18
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

执行此操作的一种方法是应用于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);

两种解决方案都具有线性时间复杂度。


查看完整回答
反对 回复 2021-06-18
?
慕后森

TA贡献1802条经验 获得超5个赞

您可以使用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'))


查看完整回答
反对 回复 2021-06-18
  • 3 回答
  • 0 关注
  • 164 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信