[英]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.