JavaScript 数组去重 封装方法改善问题。
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].变量 这个时候又是未定义。?如何解决这个问题呢
慕村9548890
浏览 479回答 6
6回答
-
潇湘沐
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
}
-
慕标琳琳
@calvinK: 谢谢
-
慕后森
///
/// 数组去重
///
/// 去重的字段名
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));
这是我写的去重方法,看下是不是你需要的
-
ibeautiful
这个也可以。核心的是arr[i][fieldName] 这个 。 谢谢了。
打开App,查看更多内容