根据优先级获取数组的值

Get value of an array based on priority

我有一个基于优先级的对象数组我需要形成一个对象数组。下面是我试过的代码

var data_res = [{
   "ACTION_TYPE": "CREATE",
   "EXECUTION_TYPE": "N_EXECUTION"
   }, 
   { "ACTION_TYPE": "CREATE",
  "EXECUTION_TYPE": "R_PRE_EXECUTION"
   }
];
var arr =  ["R_PRE_EXECUTION", "S_PRE_EXECUTION", "N_EXECUTION"];
for (var i = 0; i < data_res.length; i++) {
for (var temp in arr) {
    if (data_res[i].RULE_EXECUTION_TYPE.indexOf(arr[temp])>-1) {
        console.log("data")
        console.log(JSON.stringify(data_res[temp]))
    }
}

我得到的输出是

data
undefined
data
{"ACTION_TYPE":"CREATE","EXECUTION_TYPE":"N_EXECUTION"}

我想要基于数组 arr 的数据。像先R_PRE_EXECUTION数据必须形成然后S_PRE_EXECUTION然后N_PRE_EXECUTION,不知道哪里错了。

您似乎想根据 arr 给出的顺序对 data_res 进行排序。

var data_res = [{
    "ACTION_TYPE": "CREATE",
    "EXECUTION_TYPE": "N_EXECUTION"
}, {

    "ACTION_TYPE": "CREATE",
    "EXECUTION_TYPE": "R_PRE_EXECUTION"
}]

var arr = ["R_PRE_EXECUTION", "S_PRE_EXECUTION", "N_EXECUTION"];

data_res.sort(function(a, b) {
  var aKey = arr.indexOf(a.EXECUTION_TYPE);
  var bKey = arr.indexOf(b.EXECUTION_TYPE);  
  return aKey - bKey;
});

document.write("<pre>" + JSON.stringify(data_res,0,3));

@georg 的解决方案效果很好。这是另一种方式。

var data_res = [{
    "ACTION_TYPE": "CREATE",
    "EXECUTION_TYPE": "N_EXECUTION"
  },
  {
    "ACTION_TYPE": "CREATE",
    "EXECUTION_TYPE": "R_PRE_EXECUTION"
}]

var arr = ["R_PRE_EXECUTION", "S_PRE_EXECUTION", "N_EXECUTION"];

var ordered = [];

for (var j = 0; j < arr.length; j++) {
    for (var i = 0; i < data_res.length; i++) {
        if (arr[j].indexOf(data_res[i].EXECUTION_TYPE) > -1) {
            ordered.push(data_res[i]);
        }
    }
}

document.write('<pre>' + JSON.stringify(ordered, 0,3) + '</pre>');

第一个 indexOf 与数组的第三个元素匹配,给出 2 的索引。 data_res 只有 2 个元素,因此 data_res[temp] 给出 undefined 值。

你可以做到

var data_res = [{
    "ACTION_TYPE": "CREATE",
    "EXECUTION_TYPE": "N_EXECUTION"
}, {

    "ACTION_TYPE": "CREATE",
    "EXECUTION_TYPE": "R_PRE_EXECUTION"
}]

var arr = ["R_PRE_EXECUTION", "S_PRE_EXECUTION", "N_EXECUTION"];

for (var i = 0; i < data_res.length; i++) {
        if ((arr.indexOf(data_res[i].EXECUTION_TYPE)) > -1) {
            console.log("data")
            console.log(JSON.stringify(data_res[i]))
        }
}