如何避免重复记录为每个循环添加内部角度
How to avoid duplicate records adding inside angular for each loop?
下面的指令代码正在动态地形成一个JSON。我必须形成一个没有重复对象名称的JSON。
角度代码:
bosAppModule.directive('layoutTableCellControlLabelRender',function($compile,$rootScope){
var layoutTableCellControlLabelObj={};
var soJSON = {
entityInfo: {
entity: "",
tenantId: "",
timeStamp: new Date().toJSON().toString()
},
collections: {
}
};
var myobj={};
linkFnTableCellControlLabel=function(scope, element, attributes, controllerCtrl) {
scope.labelData="NO DATA";
angular.forEach(scope.pageObject.collections.objectattribute.rowset, function (value, index) {
if(value.objectattributeid==scope.attributeId){
scope.labelData=value.objectattributelabelname;
scope.attributeName=value.objectattributename;
//$rootScope.$broadcast("NEW_EVENT", scope.attributeName);
angular.forEach(scope.pageObject.collections.object.rowset, function (value2, index2) {
if(value2.tenantobjectid==value.objectattributeobjectid){
scope.objectname=value2.tenantobjectname;
if(!soJSON.collections[scope.objectname]) {
soJSON.collections[scope.objectname]={
"meta": {
"parentreference": "***",
"pkname": "***",
"fkname": "***"
},
"rowset": [],
"rowfilter": []
};
}
}
});
myobj[scope.attributeName]="test";
soJSON.collections[scope.objectname].rowset.push(myobj);
}
});
console.log(JSON.stringify(soJSON));
};
layoutTableCellControlLabelObj.scope={attributeId:'=',layoutData:'=',pageObject:'='};
layoutTableCellControlLabelObj.restrict='AE';
layoutTableCellControlLabelObj.replace='true';
layoutTableCellControlLabelObj.template="<div class='col-xs-12 col-sm-12 col-md-6 col-lg-6' attribute-name={{attributeName}} attribute-id='tablecellcontrol.layouttablecellcontrolbindingobjectattributeid' " +
"layout-data='layoutData' page-object='pageObject'><label class='k-label pull-right'>{{labelData}}</label></div>";
layoutTableCellControlLabelObj.link = linkFnTableCellControlLabel;
return layoutTableCellControlLabelObj;
});
使用上面的代码,我得到了JSON。在这个JSON中,行集内的记录由于循环而重复。但我对此有点困惑。我需要避免它。它应该只创建一次。任何人都请帮助我实现这一目标。如果你需要更多的细节。让我知道。
JSON-
{
"entityInfo": {
"entity": "",
"tenantId": "",
"timeStamp": "2016-04-07T07:25:49.711Z"
},
"collections": {
"Customer29Jan16": {
"meta": {
"parentreference": "***",
"pkname": "***",
"fkname": "***"
},
"rowset": [
{
"CuId": "test",
"Name": "test",
"Quantity": "test",
"Rate": "test",
"Amount": "test"
},
{
"CuId": "test",
"Name": "test",
"Quantity": "test",
"Rate": "test",
"Amount": "test"
},
{
"CuId": "test",
"Name": "test",
"Quantity": "test",
"Rate": "test",
"Amount": "test"
},
{
"CuId": "test",
"Name": "test",
"Quantity": "test",
"Rate": "test",
"Amount": "test"
},
{
"CuId": "test",
"Name": "test",
"Quantity": "test",
"Rate": "test",
"Amount": "test"
}
],
"rowfilter": []
}
}
}
我不知道它是否总是相同的json,但您可能可以在rowset
数组上使用来自lodash的uniqby。
_.uniqBy(json.collections.Customer29Jan16.rowset, function (e) {
return e.CuId;
});
演示
编辑
如果你有几个客户,你可以在一个客户阵列上循环:
arrayOfCustomers = (Object.keys(json.collections));
for(var i = 0 ; i < arrayOfCustomers.length; i++){
json.collections[arrayOfCustomers[i]].rowset = _.uniqBy(json.collections[arrayOfCustomers[i]].rowset, function (e) {
return e.CuId;
});
}
https://jsfiddle.net/kq9gtdr0/23/
相关文章:
- 如何在for循环中添加事件侦听器
- 如何使用for循环添加所有按钮'单击事件
- 如何在Angular.js中循环动态添加Fields并获取数据并将其发送到服务器
- 在不使用循环的情况下,从一个数据库字符串值向javascript数组添加多个对象
- js:如何制作一个循环,将20个不同的东西添加到一个对象中
- 借助for循环和数组在对象中添加属性
- Foreach循环添加值略有偏离
- 使用游标循环将JS对象添加到数组中
- foreach对象循环添加到堆栈顶部
- 在循环中添加addEventListener()只适用于最后一个按钮
- 如何在JavaScript中移除在循环中连接字符串时添加的额外字符
- 在循环中为日期添加天数,javascript
- Jquery循环洗涤器插件:添加到图像的链接
- 使用Javascript为HTML5音频添加循环
- 在 Jquery 中添加循环变量并存储在输入字段中
- 向 ajax 参数添加循环
- 如何使用jquery添加循环多个HTML5视频
- 如何在jQuery函数中传递数组或添加循环
- 可以在追加到 DOM 时添加循环
- 在较大的动画函数中为3个小动画添加循环函数