首页 新闻 搜索 专区 学院

JavaScript 数组去重 封装方法改善问题。

0
悬赏园豆:10 [已解决问题] 解决于 2016-11-02 08:27
 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].变量 这个时候又是未定义。?如何解决这个问题呢 

 
s_p的主页 s_p | 菜鸟二级 | 园豆:295
提问于:2016-11-01 16:57
< >
分享
最佳答案
0

Array.prototype.contains = function(obj,field) { for (var i = 0; i < this.length; i++) { if (obj == this[i][field]) { //改善的问题在这里 return true; } } return false; }

收获园豆:6
授之以渔 | 小虾三级 |园豆:1076 | 2016-11-01 17:54

谢谢

s_p | 园豆:295 (菜鸟二级) | 2016-11-02 08:26
其他回答(2)
0

=function(key,field){

//todo

this[i][field]===key

}

收获园豆:4
czd890 | 园豆:9188 (大侠五级) | 2016-11-01 17:43

=function(func){

for{

return func(this[i]);

}

}

 

[].contains(function(item){ item.xxx===xxx});

支持(0) 反对(0) czd890 | 园豆:9188 (大侠五级) | 2016-11-01 17:46

@calvinK: 谢谢

支持(0) 反对(0) s_p | 园豆:295 (菜鸟二级) | 2016-11-02 08:26
0
/// <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));

这是我写的去重方法,看下是不是你需要的

天碼行空 | 园豆:202 (菜鸟二级) | 2016-12-14 14:32

这个也可以。核心的是arr[i][fieldName] 这个 。 谢谢了。

支持(0) 反对(0) s_p | 园豆:295 (菜鸟二级) | 2016-12-20 17:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册