为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕村9548890 2018-12-06 23:36:26
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].变量 这个时候又是未定义。?如何解决这个问题呢 
查看完整描述

6 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

Array.prototype.contains = function(obj,field) { for (var i = 0; i < this.length; i++) { if (obj == this[i][field]) { //改善的问题在这里 return true; } } return false; }
查看完整回答
反对 回复 2018-12-09
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

=function(key,field){ //todo this[i][field]===key }
查看完整回答
反对 回复 2018-12-09
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

@calvinK: 谢谢
查看完整回答
反对 回复 2018-12-09
?
慕后森

TA贡献1802条经验 获得超5个赞

/// /// 数组去重 /// /// 去重的字段名 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)); 这是我写的去重方法,看下是不是你需要的
查看完整回答
反对 回复 2018-12-09
?
ibeautiful

TA贡献1993条经验 获得超5个赞

这个也可以。核心的是arr[i][fieldName] 这个 。 谢谢了。
查看完整回答
反对 回复 2018-12-09
  • 6 回答
  • 0 关注
  • 478 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信