2016-08-05 17 views
5

Tôi biết rằng tiêu đề của câu hỏi này đã không có ý nghĩa bởi vì các đối tượng không bị sắp xếp theo bản chất của chúng. NHƯNG, tôi nghĩ nếu bạn nhìn vào ảnh chụp màn hình được liên kết ở đây, nó sẽ có ý nghĩa hơn.Tôi có thể tạo một đối tượng có cùng thứ tự với một đối tượng khác không?

Picture of the two objects in my console.log

Đây là những gì đang diễn ra. Tôi đang tạo một đối tượng có tên là $ scope.gameConfigs, được tạo ra từ dữ liệu tôi nhận được từ một cuộc gọi máy chủ (một đối tượng quy định). $ Scope.gameConfigs này tạo ra một nhóm các menu thả xuống.

Về cơ bản những gì tôi đang cố gắng làm là làm cho các menu thả xuống hiển thị dữ liệu đã lưu trước đó NẾU dữ liệu tồn tại. Khi dữ liệu đã lưu tồn tại, máy chủ trả về một đối tượng có tất cả dữ liệu đã lưu. Dữ liệu này được sắp xếp theo số lượng. Vấn đề của tôi là, dữ liệu đã lưu này không phải lúc nào cũng được sắp xếp giống như dữ liệu trong $ scope.gameConfigs mà tôi tạo, dẫn đến các trường trống xuất hiện trong trình đơn thả xuống của tôi.

Nếu bạn nhìn vào ảnh chụp màn hình mà tôi đã liên kết, bạn có thể thấy các khóa trong $ scope.gameConfigs (đối tượng có dòng 30 được viết bên cạnh nó) là Bản đồ, Máy chủ và Chế độ.

Đối tượng thứ hai, là dữ liệu đã lưu được trả về từ máy chủ, là một nhóm đối tượng mà mỗi đối tượng có thuộc tính tên (là tên của menu thả xuống). Nếu bạn xem xét điều đó, thứ tự là Máy chủ, Bản đồ và Chế độ.

Câu hỏi của tôi là, làm cách nào để làm cho đối tượng Dữ liệu đã lưu sao chép thứ tự đối tượng $ scope.gameConfigs của tôi? Điều đó thậm chí có thể? Nếu không, cách tốt nhất để tiếp tục là gì?

Đây là HTML và bộ điều khiển tôi có cho trang của tôi/điều khiển, cũng vậy, nếu điều đó giúp tại tất cả:

<form class="form-horizontal" ng-controller="GamePreferenceCtrl"> 
    <div ng-repeat="(name, section) in gameConfigs"> 
     <label ng-bind="name"></label> 
     <select class="form-control" ng-model="formData.settings[$index].value" ng-change="dropdownItemClicked(name, formData.settings[$index].value)"> 
      <option value="" disabled="disabled">---Please Select Option---</option> 
      <option ng-repeat="item in section" value="{{item.value}}" ng-bind="item.value"></option> 
     </select> 
    </div> 
    <div class="col-md-12" ng-include="gametemp"></div> 
    <div class="row"> 
     <div class="hr-line-dashed"></div> 
     <div class="text-center col-md-12 padding-15"> 
      <button class="btn btn-primary btn-lg" ng-click="saveGameSetting()" formnovalidate translate> 
       <i class='fa fa-circle-o-notch fa-spin' ng-if="showBusy"></i>&nbsp;Save 
      </button> 
     </div> 
    </div> 
</form> 

và bộ điều khiển:

function GamePreferenceCtrl($scope, $filter, Tournament, Notification) { 
    $scope.$parent.child.game = $scope; 
    $scope.selectedItems = []; 
    $scope.formData = {}; 

    $scope.loadConfig = function() { 
     Tournament.loadGameConfig($scope.id).then(function (response) { 
     $scope.gameConfigs = {}; 

     if (response.data.tournamentPrefs) { 
      _.each(response.data.tournamentPrefs, function (val) { 
      if ($scope.formData.settings === undefined) { 
       $scope.formData.settings = []; 
      } 
      $scope.formData.settings.push({section: val.name, value: val.value}); 
      }); 
      $scope.formData = {}; 
     }; 

     $scope.dropdownItemClicked = function(name, value) { 
      if($scope.formData.settings === undefined) { 
       $scope.formData.settings = {}; 
       $scope.formData.settings[name] = value; 
      } else { 
      console.log('inside else'); 
       $scope.formData.settings[name] = value; 
      } 

     }; 

     _.each(response.data.provisions, function (val) { 
      if ($scope.gameConfigs[val.section] === undefined) { 
       $scope.gameConfigs[val.section] = []; 
      } 
      $scope.gameConfigs[val.section].push({name: val.key, value: val.value}); 
     }); 
     }); 
    }; 

Tôi biết đây là một đọc lâu, và tôi thực sự đánh giá cao bất cứ ai có thể giúp tôi với điều này. Cảm ơn bạn!

+0

Giống như bạn nói, các đối tượng là không có thứ tự. Không có gì đảm bảo về thứ tự các phím sẽ được hiển thị. Tốt nhất, bạn có thể lấy các khóa của một đối tượng ('Object.keys (obj)') rồi sắp xếp chúng và cuối cùng in ra từng giá trị cho mỗi khóa. Nhưng bạn không thể làm cho Chrome hiển thị các khóa đối tượng theo một thứ tự nhất định. Bạn cũng có thể viết một hàm 'toString' và gọi nó. –

+0

Bạn có thể sử dụng ES6 'Bản đồ'. – gcampbell

+0

Bạn nên đơn giản hóa vấn đề. Tôi khá chắc chắn câu hỏi của bạn có thể được tóm tắt trong hai dòng và không có một mẫu mã, và nó sẽ là thú vị đủ anyway, D –

Trả lời

0

Bạn có thể làm như

var o = {z:1, f:2, a:7} 
 
    p = Object.assign({},o), 
 
    q = Object.assign(o) 
 
console.log(o, p, o === p); 
 
console.log(o, q, o === q);

Các vấn đề liên quan