我有一个数组需要将其反转,下面是列子,需要注意的最大值4的位置不能变,然后将最大值前面与后面的值分别重新倒置编排进去,数学不太好,求助大家帮忙
var arr = [1, 0, 4, 3, 2]; 反转为 var arr = [2, 3, 4, 0, 1]; var arr = [0, 4, 3, 2, 1]; 反转为 var arr = [3, 4, 0, 1, 2]; var arr = [4, 3, 2, 1, 0]; 反转为 var arr = [4, 0, 1, 2, 3]; var arr = [3, 2, 1, 0, 4]; 反转为 var arr = [0, 1, 2, 3, 4];
三叔2016-11-17 15:19:55
var array = [10, 20, 45, 56, 15]; var maxIndex = array.reduce((iMax, x, i, arr) => x > array[iMax] ? i: iMax, 0 ); var removedItem = array.splice(maxIndex , 1); var reversedArray = array.reverse(); reversedArray.splice(maxIndex, 0, removedItem[0]); console.log(reversedArray); // [15, 45, 20, 56, 10]
1 reduce获取到最大值的index
2 splice将最大值从原数组中移除
3 reverse将数组翻转
4 将最大值放回原位置
欧阳克2016-11-17 15:19:34
//PHP
$arr = array(0, 4, 3, 2, 1); $b = array_shift($arr); $c = array_chunk($arr,2); asort($c['0']); asort($c['1']); print_r(array_merge($c['0'],(array)$b,$c['1']));
三叔2016-11-17 15:19:17
第一个方法
<script> var arr = [1, 0, 4, 3, 2]; //var arr = [2, 3, 4, 0, 1]; console.log(arr); var index=get_index(4,arr); arr.splice(index,1); arr.reverse(); arr.splice(index,0,4); console.log(arr); function get_index(val,arr){ for(var i=0;i<arr.length;i++){ if(arr[i]==val){ return i; } } } </script>
欧阳克2016-11-17 15:18:45
这样就可以了
var arr = [3, 2, 1, 0, 4];
var max = arr[0]; //最大值
for(var i=1;i<arr.length;i++){
if(max<arr[i])max=arr[i];
}
var index = arr.indexOf(max);//最大值下标
arr.splice(index,1);//删除最大值
arr.reverse();//倒叙数组 也可按照你自己的排序规则自己排序
arr.splice(index,max,max);//指定位置添加元素
console.log(arr);
三叔2016-11-17 15:18:30
这个其实很简单的,以空间换时间,先翻转,然后连拼3个,再计算之前的最大值所在的位置,进行新数组的切割。
最大的性能消耗在getmax上。
var test = [ [1, 0, 4, 3, 2], [0, 4, 3, 2, 1], [4, 3, 2, 1, 0], [3, 2, 1, 0, 4] ]; test.forEach(arr => console.log(reversal(arr))); // 反转 function reversal(arr) { let len = arr.length; // get max let max = arr[0]; let index = 0; arr.forEach((v, i) => { if (v <= max) return; max = v; index = i; }); // strat re let tmp = arr.reverse().concat(arr, arr); let newIndex = len - 1 - index + len; return tmp.slice(newIndex - index, newIndex + len - index); }