写逻辑的过程中,你会发现,基础的方法特别重要,数组的方法和对象的方法,一定得特别熟悉,这在前端开发中很重要!!
首先,我直接给出多属性值排序的方法,再说下一个详细的真实案例
例如:将下列数组按照pxId排序,当pxId相等时按照dj排序
var arr1 = [
{ID: "4001104",pxId: 2001,dj: 1,bh: 4001104},
{ID: "4001105",pxId: 2005,dj: 1,bh: 4001105},
{ID: "4010102",pxId: 2001,dj: 10,bh: 4010102},
{ID: "4010103",pxId: 2005,dj: 10,bh: 4010103},
{ID: "4010104",pxId: 2001,dj: 10,bh: 4010104},
{ID: "4001102",pxId: 2001,dj: 1,bh: 4001102},
{ID: "4001103",pxId: 2002,dj: 1,bh: 4001103},
{ID: "4001106",pxId: 2003,dj: 1,bh: 4001106},
{ID: "4001101",pxId: 2001,dj: 2,bh: 4001101},
{ID: "4010101",pxId: 2001,dj: 10,bh: 4010101}
];
arr1.sort(function(a, b) {
if(a["pxId"] === b["pxId"]) {
if(a["dj"] > b["dj"]) {
return 1;
} else if(a["dj"] < b["dj"]) {
return -1;
} else {
return 0;
}
} else {
if(a["pxId"] > b["pxId"]) {
return 1;
} else {
return -1;
}
}
})
console.log(arr1);
注:参考:https://blog.csdn.net/weixin_43358852/article/details/82970007
我们的需求是,首先快速录入一堆数据,这些数据可在表格中更改,然后传给后台的时候,自动排好序,按照款号相同的放一起,尺码相同的放一起。
- 快速录入解析数据
固定格式,按照换行和空格去解析数据
var context = $('#input_context').val()||'';
var temp = context.split(/[\r\n,]/g);//换行分割数组,数据分条
var productArr = [];
for(var i=0; i<temp.length; i++){
var arr = $.trim(temp[i]).split(/\s+/); //空格分割数据,获取每个字段值(尺码,队号,姓名)
var p_size = arr[0] ? arr[0].toUpperCase() : '';
var p_team_num = arr[1] ? arr[1] : '';
var p_name = '';
if(arr.length>3){ //姓名可以加空格,除了前两个,后面的值都属于姓名部分
arr.splice(0,2);
p_name = arr.join(' ');
}else{
p_name = arr[2] ? arr[2] : '';
}
if(p_size){//尺码是必填项
//格式化尺码,XXL -> 2XL XXXL->3XL
var p_size_arr = p_size.split('X');
var num = p_size_arr.length-1;
var model = p_size_arr.pop();
if(num > 1){
p_size = num + 'X' + model;
}
productArr.push({
p_name: p_name,
p_size: p_size,
p_team_num: p_team_num
});
addTrFnc({
p_model: '',
p_color: '',
p_name: p_name,
p_team_name: '',
p_size: p_size,
p_team_num: p_team_num,
// p_price: '',
p_remark: ''
})
}
}
console.log(productArr)
function addTrFnc(obj){
/*生成序号*/
var arr_xuhao = $('#Tbody .serialnumd');
var order_num = arr_xuhao.length + 1;
// if (order_num > 25) {
// $('#modal-tip').show();
// $('#modal-tip .tip-content').html('最多支持25条');
// return false;
// }
/*生成tr*/
var $tr =`<tr class="parenttr">
<td class="serialnumd" style="width: 30px">${order_num}</td>
<td class="operatetd"><a class="goods_del">删除</a></td>
<td><input type="text" name="p_model" value="${obj.p_model}"/></td>
<td><input type="text" name="p_color" value="${obj.p_color}"/></td>
<td><input type="text" name="p_size" value="${obj.p_size}"/></td>
<td><input type="text" name="p_name" value="${obj.p_name}"/></td>
<td><input type="text" name="p_team_num" value="${obj.p_team_num}"/></td>
<td><input type="text" name="p_team_name" value="${obj.p_team_name}"/></td>
<td><input type="text" name="p_remark" value="${obj.p_remark}"/></td>
</tr>`;
$('.goodslist').append($tr);
}
解析完以后,循坏添加元素插入表格,表格td里面直接放input,可直接修改数据信息,取的时候循环tr去拿input值
- 排序
最后传给后台的时候,获取这些商品信息,并按照款号和尺码排列
/* 获取定制商品信息数据 */
function getCustomData(){
var trs = $('#Tbody tr');
$.each(trs , function(i) {
var $this = $(this);
var p_model = $this.find('input[name=p_model]').val();
var p_color = $this.find('input[name=p_color]').val();
var p_size = $this.find('input[name=p_size]').val();
customData.push({
p_model: p_model,
p_color: p_color,
p_size: p_size,
p_name: $this.find('input[name=p_name]').val(),
p_team_num: $this.find('input[name=p_team_num]').val(),
p_team_name: $this.find('input[name=p_team_name]').val(),
// p_price: $this.find('input[name=p_price]').val(),
p_remark: $this.find('input[name=p_remark]').val()
})
});
customData.sort(function(a, b) {
if(a["p_model"] === b["p_model"]) {
if(a["p_size"] > b["p_size"]) {
return 1;
} else if(a["p_size"] < b["p_size"]) {
return -1;
} else {
return 0;
}
} else {
if(a["p_model"] > b["p_model"]) {
return 1;
} else {
return -1;
}
}
})
return customData;
}