簡體   English   中英

如何將單個對象數組與其鍵值進行比較

[英]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中的每個項目,比較resourceIdtaskId的值,如果它們匹配,則將它們推送到新數組。 這個新數組是從方法返回的。

您現在可以調用此方法進行過濾:

let filteredArray = filterArray(data, 1234, 5001)

filteredArray數組現在將包含所有resourceId = 1234taskId = 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));

這將產生如下所示的新數組,您可以根據需要修改鍵名(數組名)

在此處輸入圖像描述

JS小提琴: https://jsfiddle.net/2cpe3ts6/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM