将一个统计数组中重复元素的方法分成两个方法来实现

下面的代码是一个统计inputs数组中的重复元素的方法,现在老师让我将该方法拆解成两个方法来实现,最好是将第二个for循环拆解成一个方法
var inputs=[
{barcode: 'ITEM000000',name: '可口可乐',unit: '瓶',price: 3.00},
{barcode: 'ITEM000000',name: '可口可乐',unit: '瓶',price: 3.00},
{barcode: 'ITEM000000',name: '可口可乐',unit: '瓶',price: 3.00},
{barcode: 'ITEM000000',name: '可口可乐',unit: '瓶', price: 3.00},
{barcode: 'ITEM000000',name: '可口可乐',unit: '瓶',price: 3.00},
{barcode: 'ITEM000001',name: '雪碧',unit: '瓶',price: 3.00},
{barcode: 'ITEM000004',name: '电池',unit: '个',price: 2.00} ,
{barcode: 'ITEM000001',name: '雪碧',unit: '瓶',price: 3.00},];
function get_list(inputs){
var items=[];

items.push(inputs[0]);
items[0].count=0;
for(var i=0;i<inputs.length;i++){

for(var j=0;j<items.length;j++){

if(inputs[i].barcode==items[j].barcode){

items[j].count++;

break;
}
else if(j==items.length-1){

inputs[i].count=1;

items.push(inputs[i]);
break;

           }  
      }     
  }

return items;

}

function get_list2(inputs){
var items=[];
for(var i=0;i<inputs.length;i++){
var item=inputs[i];
var key=item.barcode+"_"+item.name+"_"+item.unit+"_"+item.price;
if(items[key]){
items[key].count++;
}
else{
items[key]={count:1,data:item};
}
}
console.log(items);
}

    //改成下面这种写法吧,这样每次过滤,inputs中的重复行会动态删减,减少最外层遍历次数
    function get_list(inputs){
        var items=[];
        for(var i=0;i<inputs.length;i++){
            i=getRepeat(i,inputs,items)?i-1:i;
        }
        return items;
    }
    function getRepeat(index,inputs,items){
        for(var i=0;i<items.length;i++){
            if(inputs[index].barcode==items[i].barcode){
                items[i].count++;
                inputs.splice(index,1);
                return true;
            }
        }
        items.push(inputs[index]);
        items[items.length-1].count=1;
        return false;
    }
console.log(items);结果输出如下图:

图片说明

alert(JSON.stringify(items));结果输出如下图:

图片说明

张大教主代码写的6啊,减少最外层遍历次数 这个执行次数是不变的都是inputs.length

//仔细kanle下,上面那种写法对提高效率没起到实际作用,还是按部就班来吧
    function get_list(inputs){
        var items=[];//用于存储返回结果
        for(var i=0;i<inputs.length;i++){
            //判断inputs[i]是否已经包含在items中
            //如果已经包含,items指定行count数加1,如果不包含,加入并更新count
            getRepeat(inputs[i],items);
        }
        alert(JSON.stringify(items));
        return items;
    }
    //getRepeat用于判断input是否已经包含在items中
    //true:已经包含,items[i]记录数+1
    //false:未曾包含,加入到items,更新记录数为1
        function getRepeat(input,items){
            for(var i=0;i<items.length;i++){
                    if(input.barcode==items[i].barcode){
                            items[i].count++;//items包含该元素,items[i]记录数+1
                            return;//返回
                    }
            }
        //items尚未包含该元素
        items.push(input);//加入
        items[items.length-1].count=1;//记录数+1
        return;//返回
        }