简体   繁体   中英

How do I compare single array of objects with it key values

I have an array of objects, Where I need to compare "taskId" & "resourceId" of its own array of objects and push the result in a new array. Here is my array

data = [{
  "resourceId":1234
  "taskId":5001
  "taskName":"Test task1"
 },
 {
  "resourceId":1234
  "taskId":5001
  "taskName":"Test task2"
}
{
 "resourceId":1234
 "taskId":5002
 "taskName":"Test task3"
},
{
 "resourceId":1234
 "taskId":5001
 "taskName":"Test task4"
},
{
 "resourceId":5678
 "taskId":5003
 "taskName":"Test task5"
},
{
 "resourceId":5678
 "taskId":5004
 "taskName":"Test task6"
}
]

Please help me to build this logic. I appreciate your efforts in advance.

Create a new method filterArray to filter the array.

function filterArray(dataArray, resourceId, taskId){
   return dataArray.filter(item => item.resourceId === resourceId && item.taskId === taskId)
}

The filter method on the array will loop through each item in the dataArray , compare the values of resourceId and taskId and if they matches, push them to the new array. This new array is returned from the method.

You can now call this method to filter:

let filteredArray = filterArray(data, 1234, 5001)

filteredArray will now contain all items with resourceId = 1234 and taskId = 5001

1- Your JSON array isn't well formatted.

2- As per your expected outcome in comments, basically you need those data which have multiple occurrences only. So here is how you can get:

 var data = [{ "resourceId":1234, "taskId":5001, "taskName":"Test task1" }, { "resourceId":1234, "taskId":5001, "taskName":"Test task2" }, { "resourceId":1234, "taskId":5002, "taskName":"Test task3" }, { "resourceId":1234, "taskId":5001, "taskName":"Test task4" }, { "resourceId":5678, "taskId":5003, "taskName":"Test task5" }, { "resourceId":5678, "taskId":5004, "taskName":"Test task6" } ]; const result = []; data.forEach((item) => { let dupes = data.filter((elem) => elem.resourceId == item.resourceId && elem.taskId == item.taskId); if (dupes.length >1) { result.push(item); } }); console.log(result);

 data = [{ "resourceId":1234, "taskId":5001, "taskName":"Test task1" }, { "resourceId":1234, "taskId":5001, "taskName":"Test task2" }, { "resourceId":1234, "taskId":5002, "taskName":"Test task3" }, { "resourceId":1234, "taskId":5001, "taskName":"Test task4" }, { "resourceId":5678, "taskId":5003, "taskName":"Test task5" }, { "resourceId":5678, "taskId":5004, "taskName":"Test task6" } ] var result=[]; data.map(x=>{ var i=result.findIndex(y=> y.resourceId==x.resourceId && y.taskId==x.taskId ); if( i == -1){ result.push( { "resourceId":x.resourceId,"taskId":x.taskId,"taskName":x.taskName } ) }else{ result[i].taskName += " "+x.taskName; } }) console.log(result)

 data = [{ "resourceId":1234, "taskId":5001, "taskName":"Test task1" }, { "resourceId":1234, "taskId":5001, "taskName":"Test task2" }, { "resourceId":1234, "taskId":5002, "taskName":"Test task3" }, { "resourceId":1234, "taskId":5001, "taskName":"Test task4" }, { "resourceId":5678, "taskId":5003, "taskName":"Test task5" }, { "resourceId":5678, "taskId":5004, "taskName":"Test task6" } ] var result=[]; data.map(x=>{ var i=result.findIndex(y=> y.resourceId==x.resourceId && y.taskId==x.taskId ); if( i == -1){ result.push( { "resourceId":x.resourceId,"taskId":x.taskId,"taskName":[x.taskName] } ) }else{ result[i].taskName.push( x.taskName); } }) console.log(result)

You can use https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce

var result = data.reduce(function (r, a) {
    var value = a.resourceId.toString().concat(a.taskId);
    r[value] = r[value] || [];
    r[value].push(a);
    return r;
}, Object.create(null));

This will result the new array as shown below, you can modify the key name(array names) as required

在此处输入图像描述

JS Fiddle: https://jsfiddle.net/2cpe3ts6/

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM