如何在角度js中更改对象(不是数组)的顺序

时间:2017-06-12 05:53:18

标签: javascript angularjs

我有一组对象(键值对)

var data  = {
         "AnomalyEnableLatch": "false",
        "DistLogPeriod": "0",
        "AedCooldown": "0",
        "AedEnableLatch": "false",
        "AedGuardBand": "0",
        "AedSensitivity": "0",
        "AedWindowSize": "0",
        "AnomalyCurrentNoiseFloor": "10",
        "AnomalyGuardBandSize": "32",
        "AnomalyKsigToStart": "40",
        "AnomalyMinSnrToStop": "100",
        "AnomalyWindowSize": "651"
    };

此列表将是动态列表。

我需要通过两个参数订购

一个以 aed 开头,另一个以异常开头。

实际上,我从api响应中获得了正确的顺序。在处理js时,按顺序自动更改订单。

不应该这样做。我需要做实际订单的工作。

否则我需要更改订单。我需要上面提到的订单

http://jsfiddle.net/MohaideenIsmail/ADukg/11659/

3 个答案:

答案 0 :(得分:0)

实际上,订单并没有改变。但是控制台会像那样显示出来。

在使用过滤器之前,请先观察Object.keys(data) .sort() // sort keys alphabetically .forEach(function(v, i) { console.log(v, data[v]); // access properties(keys) alphabetically }); 。它只是无序的对象属性数组。现在,如果你想按字母顺序排序,那么

你可以做的是使用Object.keys(),然后对Array进行排序,然后通过object迭代它。

@PreAuthorize("hasRole('ROLE_ADMIN')")

答案 1 :(得分:0)

如评论所示,您无法对对象中的键进行排序/排序。但您可以按照访问密钥的方式订购。

您可以使用以下JSFiddle来调试或关注SO代码段。



<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.11/angular.min.js"></script>

<div ng-app>
  <div ng-controller="MyCtrl">
    Hello, {{name}}!
    <div>
      <ul>
        <li ng-repeat="k in keys">
          {{k}} : {{ data[k] }}</li>
      </ul>
    </div>
  </div>
</div>
&#13;
root
&#13;
&#13;
&#13;

答案 2 :(得分:0)

无法保证JavaScript对象中键的顺序。有两种方法可以解决这个问题:

  1. 之前已知密钥及其顺序:在这种情况下,预定义您的密钥数组并使用Array.prototype.map从数据映射构建有序数组。
  2. 如果密钥也是动态的,使用Object.keys提取密钥,请使用Array.prototype.sort(compareFn)根据需要对其进行排序。然后,您可以使用方法1
  3. 中描述的此排序键数组

    示例代码,用于在给定一组有序键的情况下从地图中获取有序数组:

    var data = {...}; //Original data map
    
    var orderedKeys = ["firstKey", "secondKey"]; //Array of preordered keys
    
    var sortedArrayOfMaps = orderedKeys.map(function(key){var o={}; o[key]=data[key]; return o;}) //Use map to get ordered array of objects
    

    我还使用此方法更新了JS Fiddle以供参考