我有一个对象数组,在这里我需要比较它自己的对象数组的“ taskId”和“ resourceId”并将结果推送到一个新的数组中。 这是我的数组
Fatal error: Uncaught SoapFault exception: [ns0:Server] java.lang.NullPointerException in C:\xampp\htdocs\tnt\index.php:27 Stack trace: #0 C:\xampp\htdocs\tnt\index.php(27): SoapClient->__soapCall('calculaFrete', Array) #1 {main} thrown in C:\xampp\htdocs\tnt\index.php on line 27
请帮助我建立此逻辑。感谢您的提前努力。
答案 0 :(得分:1)
创建一个新方法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 :(得分:0)
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);
答案 2 :(得分:0)
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)
答案 3 :(得分:0)
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)
答案 4 :(得分:0)
您可以使用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));
这将产生如下所示的新数组,您可以根据需要修改键名(数组名)