![](/img/trans.png)
[英]How do I group values present under a key in all objects in an array of JSON, under a single key?
[英]How do I compare single array of objects with it key values
我有一個對象數組,我需要比較它自己的對象數組的“taskId”和“resourceId”並將結果推送到一個新數組中。 這是我的數組
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"
}
]
請幫我建立這個邏輯。 我提前感謝您的努力。
創建一個新方法filterArray
來過濾數組。
function filterArray(dataArray, resourceId, taskId){
return dataArray.filter(item => item.resourceId === resourceId && item.taskId === taskId)
}
數組上的filter
方法將遍歷dataArray
中的每個項目,比較resourceId
和taskId
的值,如果它們匹配,則將它們推送到新數組。 這個新數組是從方法返回的。
您現在可以調用此方法進行過濾:
let filteredArray = filterArray(data, 1234, 5001)
filteredArray
數組現在將包含所有resourceId = 1234
和taskId = 5001
的項目
1- 您的 JSON 數組格式不正確。
2-根據您在評論中的預期結果,基本上您需要那些僅出現多次的數據。 因此,您可以通過以下方式獲得:
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)
您可以使用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));
這將產生如下所示的新數組,您可以根據需要修改鍵名(數組名)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.