Javascript 如何在JS中基于子值获取父JSON对象
我的JSON如下:Javascript 如何在JS中基于子值获取父JSON对象,javascript,json,Javascript,Json,我的JSON如下: [ RowDataPacket { workflowId: 1, stepId: 1, workflowTypeId: 4, baseFieldId: 3, relatedFieldId: 0, relatedValue: 'YES', nextTrueStepId: 2, nextFalseStepId: 4 }, RowDataPacket { workflowId: 1, stepId:
[ RowDataPacket {
workflowId: 1,
stepId: 1,
workflowTypeId: 4,
baseFieldId: 3,
relatedFieldId: 0,
relatedValue: 'YES',
nextTrueStepId: 2,
nextFalseStepId: 4 },
RowDataPacket {
workflowId: 1,
stepId: 2,
workflowTypeId: 2,
baseFieldId: 4,
relatedFieldId: 0,
relatedValue: '',
nextTrueStepId: 3,
nextFalseStepId: 4 },
RowDataPacket {
workflowId: 1,
stepId: 3,
workflowTypeId: 9,
baseFieldId: 5,
relatedFieldId: 0,
relatedValue: 'SUBMITTED',
nextTrueStepId: 4,
nextFalseStepId: 0 },
RowDataPacket {
workflowId: 1,
stepId: 4,
workflowTypeId: 10,
baseFieldId: 0,
relatedFieldId: 0,
relatedValue: '',
nextTrueStepId: 0,
nextFalseStepId: 0 } ]
如果子元素的nextTrueStepId=3,如何获取父元素(例如arr[parentID])
我使用的是这样的forEach,但它按顺序迭代行:
arr.forEach(function(row) {
nextStep = processFlowRow(row, Id);
});
编辑:Json现在看起来如下所示,但是当我调用arr[0]时,我只返回“[”而不是行
[
{
"workflowId": 1,
"stepId": 1,
"workflowTypeId": 4,
"baseFieldId": 3,
"relatedFieldId": 0,
"relatedValue": "yes",
"nextTrueStepId": 2,
"nextFalseStepId": 4
},
{
"workflowId": 1,
"stepId": 2,
"workflowTypeId": 2,
"baseFieldId": 4,
"relatedFieldId": 0,
"relatedValue": "",
"nextTrueStepId": 3,
"nextFalseStepId": 4
},
{
"workflowId": 1,
"stepId": 3,
"workflowTypeId": 9,
"baseFieldId": 1,
"relatedFieldId": 0,
"relatedValue": "SUBMITTED",
"nextTrueStepId": 4,
"nextFalseStepId": 0
}
]试试这个:
//Assuming your data is in a variable named jsonObj
jsonObj.filter(function(elem){
return elem.nextTrueStepId===3;
})
试试这个:
//Assuming your data is in a variable named jsonObj
jsonObj.filter(function(elem){
return elem.nextTrueStepId===3;
})
修复JSON数据中的错误并将其存储到
input
后,假设您只希望有一项匹配:
input.find(item=>item.nextTrueStepId==3)
代码片段(注意它是ES6!):
var输入=[{
“workflowId”:1,
“stepId”:1,
“workflowTypeId”:4,
“Basefield ID”:3,
“relatedFieldId”:0,
“relatedValue”:“是”,
“nextTrueStepId”:2,
“nextFalseStepId”:4
}, {
“workflowId”:1,
“stepId”:2,
“workflowTypeId”:2,
“Basefield ID”:4,
“relatedFieldId”:0,
“relatedValue”:“,
“nextTrueStepId”:3,
“nextFalseStepId”:4
}, {
“workflowId”:1,
“stepId”:3,
“workflowTypeId”:9,
“Basefield ID”:1,
“relatedFieldId”:0,
“relatedValue”:“已提交”,
“nextTrueStepId”:4,
“nextFalseStepId”:0
}]
console.log(input.find(item=>item.nextTrueStepId==3))
在修复JSON数据中的错误并将其存储到input
后,假设您只希望有一个项匹配:
input.find(item=>item.nextTrueStepId==3)
代码片段(注意它是ES6!):
var输入=[{
“workflowId”:1,
“stepId”:1,
“workflowTypeId”:4,
“Basefield ID”:3,
“relatedFieldId”:0,
“relatedValue”:“是”,
“nextTrueStepId”:2,
“nextFalseStepId”:4
}, {
“workflowId”:1,
“stepId”:2,
“workflowTypeId”:2,
“Basefield ID”:4,
“relatedFieldId”:0,
“relatedValue”:“,
“nextTrueStepId”:3,
“nextFalseStepId”:4
}, {
“workflowId”:1,
“stepId”:3,
“workflowTypeId”:9,
“Basefield ID”:1,
“relatedFieldId”:0,
“relatedValue”:“已提交”,
“nextTrueStepId”:4,
“nextFalseStepId”:0
}]
console.log(input.find(item=>item.nextTrueStepId==3))
我制作了3种解决方案,也添加了ES5版本,将它们包装在可重用函数中,然后还测试了执行速度(仅函数,在setup JS中声明函数超出基准)
最新版本,ES5 for loop也是最快的。要编写的代码越多,可读性就越差。基准:
var输入=[{
“workflowId”:1,
“stepId”:1,
“workflowTypeId”:4,
“Basefield ID”:3,
“relatedFieldId”:0,
“relatedValue”:“是”,
“nextTrueStepId”:2,
“nextFalseStepId”:4
}, {
“workflowId”:1,
“stepId”:2,
“workflowTypeId”:2,
“Basefield ID”:4,
“relatedFieldId”:0,
“relatedValue”:“,
“nextTrueStepId”:3,
“nextFalseStepId”:4
}, {
“workflowId”:1,
“stepId”:3,
“workflowTypeId”:9,
“Basefield ID”:1,
“relatedFieldId”:0,
“relatedValue”:“已提交”,
“nextTrueStepId”:4,
“nextFalseStepId”:0
}]
函数findItem3(x){
对于(i=input.length-1;i>=0;i--){
if(输入[i].nextRueStepId==3)返回输入[i]
}
返回{}
}
函数findItem2(x){
返回input.find(item=>item.nextruestepid==x)
}
函数findItem1(x){
返回输入。过滤器(功能(elem){
返回元素nextTrueStepId==x;
})
}
控制台日志(findItem1(3))
控制台日志(findItem2(3))
log(findItem3(3))
我对解决方案做了3个变量,也添加了ES5版本,将它们包装在可重用函数中,然后还测试了执行速度(仅函数,函数声明在基准测试之外,在setup JS中)
最新版本,ES5 for loop也是最快的。要编写的代码越多,可读性就越差。基准:
var输入=[{
“workflowId”:1,
“stepId”:1,
“workflowTypeId”:4,
“Basefield ID”:3,
“relatedFieldId”:0,
“relatedValue”:“是”,
“nextTrueStepId”:2,
“nextFalseStepId”:4
}, {
“workflowId”:1,
“stepId”:2,
“workflowTypeId”:2,
“Basefield ID”:4,
“relatedFieldId”:0,
“relatedValue”:“,
“nextTrueStepId”:3,
“nextFalseStepId”:4
}, {
“workflowId”:1,
“stepId”:3,
“workflowTypeId”:9,
“Basefield ID”:1,
“relatedFieldId”:0,
“relatedValue”:“已提交”,
“nextTrueStepId”:4,
“nextFalseStepId”:0
}]
函数findItem3(x){
对于(i=input.length-1;i>=0;i--){
if(输入[i].nextRueStepId==3)返回输入[i]
}
返回{}
}
函数findItem2(x){
返回input.find(item=>item.nextruestepid==x)
}
函数findItem1(x){
返回输入。过滤器(功能(elem){
返回元素nextTrueStepId==x;
})
}
控制台日志(findItem1(3))
控制台日志(findItem2(3))
log(findItem3(3))
除了其他解决方案之外,您还可以使用函数中的早期返回来查看数组内部的特殊键和值的对象
该函数返回与所需模式匹配的第一个对象
函数getObject(数组、键、值){
var对象;
array.some(函数(o){
如果(o[键]==值){
对象=o;
返回true;
}
});
返回对象;
}
变量数据=[{workflowId:1,stepId:1,workflowTypeId:4,baseFieldId:3,relatedFieldId:0,relatedValue:“是”,nextTrueStepId:2,NextFalsestId:4},{workflowId:1,stepId:2,workflowTypeId:2,baseFieldId:4,relatedFieldId:0,relatedValue:0,nextTrueStepId:3,NextFalsestId:4},{workflowId:1,stepId:3,workflowTypeId:9,baseFieldId:1,relatedFieldId:0,relatedValue:“已提交”,nextTrueStepId:4,NextFalsestId:0}];
log(getObject(data,'nextTrueStepId',3));除了其他解决方案之外,您还可以在函数中提前返回,用于查找数组内部的特殊键和值的对象 该函数返回与所需模式匹配的第一个对象 函数getObject(数组、键、值){ var对象; array.some(函数(o){ 如果(o[键]==值){