【问题标题】:Get value of an array based on priority根据优先级获取数组的值
【发布时间】:2015-03-17 07:05:55
【问题描述】:

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

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,不知道我哪里出错了。

【问题讨论】:

  • EXECUTION_TYPE": "R_PRE_EXECUTION"这一行缺少引号

标签: javascript arrays sorting object


【解决方案1】:

您似乎想根据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));

【讨论】:

    【解决方案2】:

    @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>');

    【讨论】:

      【解决方案3】:

      第一个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]))
              }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-15
        • 1970-01-01
        • 2021-07-06
        • 2020-10-12
        • 2021-12-12
        • 1970-01-01
        • 2020-05-11
        • 1970-01-01
        相关资源
        最近更新 更多