var dataList = $.extend(true, {}, data);; dataList.rows = []; for (var i = 0; i < data.rows.length; i++) { if (!dataList.rows.contains(data.rows[i].taskid)) dataList.rows.push(data.rows[i]); } objData.dtTask.bootstrapTable('load', dataList);
data是数据源 。dataList是调用jq的 深复制对象方法。如果dataList里面的row存在一样的taskid
就不push。
contains方法:
Array.prototype.contains = function(obj) { for (var i = 0; i < this.length; i++) { if (obj == this[i].taskid) { //改善的问题在这里 return true; } } return false; }
问题来了。this[i].taskid是写死了 有的时候经常用到数组 不能老是复制一份代码。
请问this[i].taskid如果实现动态呢。最好的办法是在function里面传"taskid"进来 作为变量
但是 this[i].变量 这个时候又是未定义。?如何解决这个问题呢
Array.prototype.contains = function(obj,field) { for (var i = 0; i < this.length; i++) { if (obj == this[i][field]) { //改善的问题在这里 return true; } } return false; }
谢谢
=function(key,field){
//todo
this[i][field]===key
}
=function(func){
for{
return func(this[i]);
}
}
[].contains(function(item){ item.xxx===xxx});
@calvinK: 谢谢
/// <summary> /// 数组去重 /// </summary> /// <param name="fieldName">去重的字段名</param> Array.prototype.distinct = function (fieldName) { var arr = this; var uniqueArr = []; var includedKey = {}; for (var i = 0; i < arr.length; i++) { var value = arr[i][fieldName]; if (includedKey[value]) continue; uniqueArr.push(arr[i]); includedKey[value] = 1; } return uniqueArr; } // 测试 var test = [{ id: '1' }, { id: '2' }, { id: '2' }, { id: '1' }, { id: '3' }]; test = test.distinct('id'); alert(JSON.stringify(test));
这是我写的去重方法,看下是不是你需要的
这个也可以。核心的是arr[i][fieldName] 这个 。 谢谢了。