js数组操作问题

现在有一个数组如下
var arr = [111,23,44,534,4123,312,32,3123,424,552,24,55];
每隔三个切割一次 形成一个新的数组,
[[111,23,44],[534,4123,312],[32,3123,424],[24,55]]
再在新的数组里取最大值和index 形成最终数组
arr = arr=[{'index':0,'max':111},{'index':1,'max':4123},{'index':2,'max':3123},{'index':3,'max':55}];
请问 如何做到

阅读 6.3k
13 个回答
var arr = [111,23,44,534,4123,312,32,3123,424,552,24,55];
var result = [];
for(var i=0,j=0; i<arr.length; i+=3,j++){
   result.push({'index': j, 'max': Math.max.apply(Math, arr.slice(i,i+3))});
}
console.log(result);
arr.toString()
   .match(/(\d+,?){1,3}/g)
   .reduce((max, item, index)=>([...max, {index, max: Math.max(...item.split(","))}]), [])
//分割数组
function split_array(arr, len){
    var a_len = arr.length;   
     var result = [];    
     for(var i=0;i<a_len;i+=len){
             result.push(arr.slice(i,i+len));    
             }    
             return result;      
           }
      }
  var newarr=split_array(arr,3);

var res=[];
for(var i=0;i<newarr.length;i++){
   var aa={};
   aa.index=i;
   aa.max=Math.max.apply( Math, newarr[i] );

  res.push(aa)

};
let arr = [111,23,44,534,4123,312,32,3123,424,552,24,55]

let arr2 = arr.reduce((storage, value) => {
    if (!storage.counter) storage.list.push(storage.last = [])
    storage.counter = (storage.counter + 1) % 3
    storage.last.push(value)
    return storage
}, {list: [], counter: 0}).list

console.log(arr2)

let arr3 = arr2.map((value, index) => ({
    index, 
    max: Math.max(...value)
}))

console.log(arr3)

https://jsfiddle.net/xhemqce9/


一步到位的写法:

https://jsfiddle.net/gnyjrxm2/

let arr = [111,23,44,534,4123,312,32,3123,424,552,24,55]

let arr2 = arr.reduce((storage, value) => {
    if (storage.counter++ % 3)
        storage.last.max = Math.max(storage.last.max, value)
    else 
        storage.list.push(storage.last = {
            index: storage.index++,
            max: value
        }), storage
    return storage
}, { counter: 0, list: [], index: 0 }).list

console.log(arr2)
var arr = [111,23,44,534,4123,312,32,3123,424,24,55];
var tmp={
    val:-Infinity,
    index:0
},ans=[];
arr.forEach((val ,index)=>{

    if(tmp.val<val){
        tmp.val=val;
        tmp.index=index;
    }
    if((index+1)%3==0||index+1==arr.length){
        ans.push(new Object({
            'index':tmp.index%3,
            'max':tmp.val
        }));
        tmp.val=-Infinity;
        tmp.index=0;
    }
})
console.log(ans)
var arr = [111,23,44,534,4123,312,32,3123,424,552,24,55];
var newArray = [];
var tempArr = [];
for(var i = 0;i<arr.length;i++){
    tempArr = arr.splice(0, 3);
    var max = Math.max.apply(null, tempArr);
    var index = tempArr.findIndex(function(val) {
        return val == max;
    });
    newArray.push({
        index: index,
        max: max
    });
    i = 0;
}
console.log(newArray);
function group(array, subGroupLength) {
    var index = 0;
    var newArray = [];

    while(index < array.length) {
        newArray.push(array.slice(index, index+=subGroupLength));
    }
    return newArray;
}
var arr = [111,23,44,534,4123,312,32,3123,424,552,24,55];
var result = group(arr,3);
console.log(result);
var maxOfResult = [];
for(var i=0,len=result.length;i<len; i++) {
    var max = result[i][0];
    result[i].forEach(function(ele,index,arr) {
        if(ele > max) {
            max = ele;
        }
    })
    maxOfResult.push({'index': i,'max':max});
}
console.log(maxOfResult);
const arr = [111,23,44,534,4123,312,32,3123,424,552,24,55]
const formatArr = []

let tempArr = []
arr.forEach((v, i) => {
    tempArr.push(v)
    if (i%3 == 2) {
        formatArr.push(tempArr)
        tempArr = []
    }
})
console.log(formatArr)

const result = []
formatArr.forEach((arr) => {
    const max = Math.max(...arr)
    const index = arr.indexOf(max)
    result.push({
        index,
        max
    })
})
console.log(result)

https://jsfiddle.net/mmm0821/...

// 将数组分成K等份,再以对象形式返回数组的最大值和下标;
Array.prototype.getMaxAndIndexFromArray = function (k) {
    var temp = [],
        result = [];
    for (var i =0; i<this.length; i+=k) {
        temp.push(this.slice(i,i+k));
    }
    for (var i=0; i<temp.length; i++) {
        var max = Math.max(...temp[i]);
        result.push({index:temp[i].indexOf(max), max:max});
    }
    return result;
}
var arr = [111,23,44,534,4123,312,32,3123,424,552,24,55];
console.log(arr.getMaxAndIndexFromArray(3));
var arr = [111,23,44,534,4123,312,32,3123,424,552,24,55];
var size = 3;

var result = (function(size, arr) {
    var splitArr = [];
    var resultArr = [];
    var splitBySize = (size, arr) => {
        if (arr.length) {
            var arrSize = arr.splice(0, size);
            splitArr.push(arrSize);
            splitBySize(size, arr);
        }
    };
    splitBySize(size, arr);

    splitArr.forEach((item, index) => {
        let tmp = item.sort((a,b) => {return b-a;});
        let obj = {'index': index, 'max':tmp[0]};
        resultArr.push(obj);
    });

    return resultArr;
})(size,arr);

console.log(result);

var arr = [111,23,44,534,4123,312,32,3123,424,552,24,55];
var result_list=[];
var result = [];
for(var i=0,len=arr.length;i<len;i+=3){
result.push(arr.slice(i,i+3));
}
if(result.length>0){

for(let j=0;j<result.length;j++){
    var max=Math.max.apply(null, result[j]);
     result_list.push({index:""+j,value:max});
}    

}

function getArray(){
    var arr = [111,23,44,534,4123,312,32,3123,424,552,24,55];
    var newArr = [];
    var resultArr = [];
    var splitNum = Math.ceil(arr.length/3);
    for(var i=0;i<splitNum;i++){
        var b = arr.splice(0,3);
        newArr.push(b);
    }
    for(var j=0,template;template=newArr[j];j++){
        var max = Math.max.apply(Math,template);
        var index = template.indexOf(max);
        resultArr.push({'index':index,'Max':max});
    }
    return resultArr;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题