-1

i have multiple data for one id , i want filter my data like this

$scope.mpArray =[
{ Id: 1, Name: Madhu, Address: Upal },
{ Id: 1, Name: Chandu, Address: Upal },
{ Id: 2, Name: Srinu, Address: Kphb },
{ Id: 2, Name: Vijay, Address: kphb },
{ Id: 3, Name: Ajay, Address: Banglore },
{ Id: 3, Name: Narsi, Address: Banglore },
{ Id: 3, Name: Peter, Address: Banglore },
];

i want to filter my array like this

var FilterArray = [
{ Id: 1,Madhu, Chandu},
{ Id: 2, Srinu, Vijay},
{ Id: 3, Ajay, Narsi, Peter},
];
Srinu
  • 141
  • 2
  • 2
  • 11

3 Answers3

0

At first you need to change your FilterArray to

[
  {
    "Id": 1,
    "Name": [
      "Madhu",
      "Chandu"
    ]
  },
  {
    "Id": 2,
    "Name": [
      "Srinu",
      "Vijay"
    ]
  },
  {
    "Id": 3,
    "Name": [
      "Ajay",
      "Narsi",
      "Peter"
    ]
  }
]

Notice that name is an array. The FilterArray of your question

var FilterArray = [
{ Id: 1,Madhu, Chandu},
{ Id: 2, Srinu, Vijay},
{ Id: 3, Ajay, Narsi, Peter},
];

Do not contain a valid JSON object inside the array so you need to change the structure to the one where add a new key Name in the JSON object of FilterArray as like the first structure above. Then the below code works great.

$(document).ready(function(){
var myArray =[
{ Id: 1, Name: "Madhu", Address: "Upal" },
{ Id: 1, Name: "Chandu", Address: "Upal" },
{ Id: 2, Name: "Srinu", Address: "Kphb" },
{ Id: 2, Name: "Vijay", Address: "kphb" },
{ Id: 3, Name: "Ajay", Address: "Banglore" },
{ Id: 3, Name: "Narsi", Address: "Banglore" },
{ Id: 3, Name: "Peter", Address: "Banglore" },
];
var FilterArray = [];
var matched;
  for(var i=0;i<myArray.length; i++){
     matched = false;
     var myArrayId = myArray[i].Id;
       for(var j=0; j<FilterArray.length; j++){
         var FilterArrayId = FilterArray[j].Id;
          if(myArrayId === FilterArrayId){
              matched = true;
              FilterArray[j].Name.push(myArray[i].Name);
              // no need to loop further
              break;
          }
       }
       if(!matched){
           var obj = {
              'Id' : myArrayId,
              'Name' : [myArray[i].Name],
           }
           FilterArray.push(obj);
       }
  }
 console.log(FilterArray);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Ankit Agarwal
  • 30,378
  • 5
  • 37
  • 62
0

try this

var mpArray =[
{ Id: 1, Name: 'Madhu', Address: 'Upal' },
{ Id: 1, Name: 'Chandu', Address: 'Upal' },
{ Id: 2, Name: 'Srinu', Address: 'Kphb' },
{ Id: 2, Name: 'Vijay', Address: 'kphb' },
{ Id: 3, Name: 'Ajay', Address: 'Banglore' },
{ Id: 3, Name: 'Narsi', Address: 'Banglore' },
{ Id: 3, Name: 'Peter', Address: 'Banglore' },
];

var filterObject = {};

mpArray.forEach(function (item) {
    if (!filterObject[item.Id]) {
        filterObject[item.Id] = [];
    }
    
    filterObject[item.Id].push(item.Name);
});

console.log(filterObject);
madhur
  • 973
  • 1
  • 14
  • 23
0
$scope.mpArray =[
                    { Id: 1, Name: 'Madhu', Address: 'Upal' },
                    { Id: 1, Name: 'Chandu', Address: 'Upal' },
                    { Id: 2, Name: 'Srinu', Address: 'Kphb' },
                    { Id: 2, Name: 'Vijay', Address: 'kphb' },
                    { Id: 3, Name: 'Ajay', Address: 'Banglore' },
                    { Id: 3, Name: 'Narsi', Address: 'Banglore' },
                    { Id: 3, Name: 'Peter', Address: 'Banglore' },
                    ];
                    var FilterArray = [];
                    var FilteredArrayIds=[];
                    $scope.mpArray.forEach(
                                            function(detailObj) {
                                                if(FilteredArrayIds.indexOf(detailObj.Id)==-1)
                                                 return FilteredArrayIds.push(detailObj.Id);
                                        });
                    for(var i=0; i<FilteredArrayIds.length;i++)
                    {
                          var result = $scope.mpArray.filter(function( obj ) {
                              return obj.Id == FilteredArrayIds[i];
                          });
                          var rsltNames = result.map(function(obj){
                            return obj.Name;
                          })
                          var filteredObj ={
                            id:FilteredArrayIds[i]+',' +rsltNames.join()
                          }
                          FilterArray.push(filteredObj);
                    }
                    console.log(filteredObj)
alfishan aqeel
  • 220
  • 2
  • 5