[英]How to Push Calculated Value to Multidimensional JSON Object and Sort Parent and Child Objects Vue.JS
[英]How to get parent JSON object based on child value in JS
我的JSON如下:
[ 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);
});
編輯:傑森現在看起來像下面,但是當我調用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;
})
修復JSON數據中的錯誤並將其存儲到input
,假設您只希望匹配一個項目:
input.find(item=>item.nextTrueStepId === 3)
代碼段(請注意是ES6!):
var input = [{ "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 }] console.log(input.find(item=>item.nextTrueStepId === 3))
我制作了3種解決方案,也添加了ES5版本,將它們包裝在可重用的函數中,然后還測試了執行速度(僅函數,在設置JS中聲明函數不在基准范圍內)。
最新版本,ES5 for loop也是最快的方式。 雖然編寫的代碼更多,但可讀性卻更低。 基准: https : //jsbench.me/r8izihgj9w/2
var input = [{ "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 }] function findItem3(x) { for (i=input.length-1; i>=0; i--) { if (input[i].nextTrueStepId === 3) return input[i] } return {} } function findItem2(x) { return input.find(item => item.nextTrueStepId === x) } function findItem1(x) { return input.filter(function(elem){ return elem.nextTrueStepId===x; }) } console.log(findItem1(3)) console.log(findItem2(3)) console.log(findItem3(3))
除了其他解決方案,您還可以使用Array#some
早日返回函數,該函數用於在具有對象的數組內部查找特殊鍵和值。
該函數返回與所需模式匹配的第一個對象。
function getObject(array, key, value) { var object; array.some(function (o) { if (o[key] === value) { object = o; return true; } }); return object; } var data = [{ 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: 0, nextTrueStepId: 3, nextFalseStepId: 4 }, { workflowId: 1, stepId: 3, workflowTypeId: 9, baseFieldId: 1, relatedFieldId: 0, relatedValue: "SUBMITTED", nextTrueStepId: 4, nextFalseStepId: 0 }]; console.log(getObject(data, 'nextTrueStepId', 3));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.