关于js数组根据属性值,依照要求的属性值对数组进行排序求助

不知所味 发布于 2016/08/24 16:10
阅读 613
收藏 0

//原始数组

var row = [{title:'a',name:'000000000101500141'},{title:'a',name:'000000000101500147'},{title:'a',name:'000000000101500142'},{title:'a',name:'000000000101500144'},{title:'b',name:'000000000101500145'}];

//排序顺序的要求

var sort = ['101500142','101500141','101500149','101500199','101500144'];

需求:

若是排序顺序数组的第一个值能在原始数组内找到(模糊匹配),则将row[i]的对象作为新数组的第一个,以此推之,最后将原始数组内可能没有找到的剩余对象加入新数组

规则:

1、原始数组的数据是没有顺序的

2、排序顺序的值可能在原始数组内没有的

最后算出来的结果如下:

var newArray = [{title:'a',name:'000000000101500142'},{title:'a',name:'000000000101500141'},{title:'a',name:'000000000101500144'},{title:'a',name:'000000000101500147'},{title:'b',name:'000000000101500145'}];


希望算法精炼,没有一大堆for  最好是能用Underscore.js函数

加载中
0
总被尿憋醒
总被尿憋醒
function arrSort(_row, _sort) {
	if(_row == null || _row.length == 0) {
		return _row;
	}
	var _indexArr = new Array();
	var _newArray = new Array();
	$.each(_sort, function(sIndex, val) {
		$.each(_row, function(rIndex, item) {
			if(item.name.indexOf(val) >= 0) {
				_indexArr.push(rIndex);
				_newArray.push(item);
				return false;
			}
		});
	});
	$.each(_row, function(rIndex, item) {
		var _flag = false;
		$.each(_indexArr, function(iIndex, i) {
			if(rIndex == i) {
				_flag = true;
			}
		});
		if(!_flag) {
			_newArray.push(item);
		}
	});
	return _newArray;
}



0
总被尿憋醒
总被尿憋醒
var newArray = _row.sort(function(obj1, obj2){
		var _index1 = _row.length;
		var _index2 = _row.length;
		_sort.filter(function(str, index){
			if(obj1.name.indexOf(str) >= 0) {
				_index1 = index;
			} else if(obj2.name.indexOf(str) >= 0) {
				_index2 = index;
			}
		});
    	return _index1 - _index2;
	});



不知所味
不知所味
3Q
返回顶部
顶部