Как вставить JSON в массив? - PullRequest
0 голосов
/ 24 мая 2018

У меня есть массив

$scope.headArray=[
  'Online & Open Alarms',
  'Sites Overview',
  'Active Alarms',
  'Hidden Alarms'
];

, и у меня есть объект:

$scope.dashboardstatus = {
  hideDashboard1:true,  closeDashboard1:false,
  hideDashboard2:true,  closeDashboard2:true,
  hideDashboard3:false, closeDashboard3:false,
  hideDashboard4:false, closeDashboard4:false
}

, и я хочу создать эту таблицу:

$scope.dashArray = [
 {Online & Open Alarms:{hideDashboard1:true,closeDashboard1:false}} ,
 {Sites Overview:      {hideDashboard2:true,closeDashboard2:true}},
  Actives Alarms:      {hideDashboard3:false,hideDashboard3:false},
 {Hidden Alarms:       {hideDashboard4:false,closeDashboard4}}
]

Я пыталсяэто:

for (var i=0; i< $scope.headingArray.length; i++){         
    $scope.dashArray.push({$scope.headingArray[i],
   {$scope.dashboardstatus['closeDashboard'(i+1)],$scope.dashboardstatus['hideDashboard'+(i+1)]}}
);                                                                                                                                  
 }  

но не работает!

Как поместить данные в dashArray?

Ответы [ 3 ]

0 голосов
/ 24 мая 2018

Вы можете сделать что-то вроде ниже, чтобы получить окончательный результат:

let headArray=['Online & Open Alarms','Sites Overview','Active Alarms','Hidden Alarms'];
let dashboardstatus = {hideDashboard1:true,closeDashboard1:false,hideDashboard2:true,closeDashboard2:true,hideDashboard3:false,closeDashboard3:false,hideDashboard4:false,closeDashboard4:false}


let result = headArray.map((element, index) => { 
  let hideKey = `hideDashboard${index+1}`;
  let closeKey = `closeDashboard${index+1}`;
  return {[element]: {
    [hideKey]:dashboardstatus[hideKey],
    [closeKey]:dashboardstatus[closeKey]
  }}
})

console.log(result);
0 голосов
/ 24 мая 2018

Решение выглядит следующим образом: -

$scope.headArray = ['Online & Open Alarms', 'Sites Overview', 'Active Alarms', 'Hidden Alarms'];

$scope.dashboardstatus = {
  hideDashboard1: true,
  closeDashboard1: false,
  hideDashboard2: true,
  closeDashboard2: true,
  hideDashboard3: false,
  closeDashboard3: false,
  hideDashboard4: false,
  closeDashboard4: false
}
$scope.dashArray = [];

for (var i = 0; i < $scope.headArray.length; i++) {
  //form the child object first
  var objFirstChild = "hideDashboard" + (i + 1);
  var objSecondChild = "closeDashboard" + (i + 1);
  var childObj = {};
  childObj["hideDashboard" + (i + 1)] = $scope.dashboardstatus[objFirstChild];
  childObj["closeDashboard" + (i + 1)] = $scope.dashboardstatus[objSecondChild];
  //form the parent object and push it into array
  var parentObj = {}
  parentObj[$scope.headArray[i]] = childObj;
  $scope.dashArray.push(parentObj);
}


console.log($scope.dashArray);

Упрощенный способ на простом JavaScript, ниже: -

var headArray = ['Online & Open Alarms', 'Sites Overview', 'Active Alarms', 'Hidden Alarms'];

var dashboardstatus = {
  hideDashboard1: true,
  closeDashboard1: false,
  hideDashboard2: true,
  closeDashboard2: true,
  hideDashboard3: false,
  closeDashboard3: false,
  hideDashboard4: false,
  closeDashboard4: false
}
var dashArray = [];

for (var i = 0; i < headArray.length; i++) {
  var objFirstChild = "hideDashboard" + (i + 1);
  var objSecondChild = "closeDashboard" + (i + 1);
  var childObj = {};
  childObj["hideDashboard" + (i + 1)] = dashboardstatus[objFirstChild];
  childObj["closeDashboard" + (i + 1)] = dashboardstatus[objSecondChild];
  var parentObj = {}
  parentObj[headArray[i]] = childObj;
  dashArray.push(parentObj);
}


console.log(dashArray);
0 голосов
/ 24 мая 2018

Вы совсем не за горами. вычисляемые свойства (или просто установка имени свойства после создания объекта).Вы можете сделать вычисленное имя свойства, используя [expression] в левой части : в инициализаторе свойства.

Я бы сделал это с map:

const headArray=['Online & Open Alarms','Sites Overview','Active Alarms','Hidden Alarms'];

const dashboardstatus = {hideDashboard1:true,closeDashboard1:false,hideDashboard2:true,closeDashboard2:true,hideDashboard3:false,closeDashboard3:false,hideDashboard4:false,closeDashboard4:false}

const dashArray = headArray.map((name, index) => {
  const hide = "hideDashboard" + (index + 1);
  const close = "closeDashboard" + (index + 1);
  return {
    [name]: {[hide]: dashboardstatus[hide], [close]: dashboardstatus[close]}
  };
});

console.log(dashArray);
.as-console-wrapper {
  max-height: 100% !important;
}

Обратите внимание, что вычисленные имена свойств являются новыми (ish) по состоянию на ES2015.До ES2015 сначала нужно было создать объект, а затем добавить свойства.Тело обратного вызова map будет выглядеть следующим образом:

const hide = "hideDashboard" + (index + 1);
const close = "closeDashboard" + (index + 1);
const obj = {};
const value = {};
value[close] = dashboardstatus[close];
value[hide] = dashboardstatus[hide];
obj[name] = value;
return obj;

Но если вы не хотите использовать map, вот версия с минимальными изменениями в существующем коде:

const headArray=['Online & Open Alarms','Sites Overview','Active Alarms','Hidden Alarms'];

const dashboardstatus = {hideDashboard1:true,closeDashboard1:false,hideDashboard2:true,closeDashboard2:true,hideDashboard3:false,closeDashboard3:false,hideDashboard4:false,closeDashboard4:false}

const dashArray = [];

// Note that you had $scope.headingArray, not $scope.headArray, but you showed
// $scope.headArray when showing the array's contents
for (var i = 0; i < headArray.length; i++) {
  const close = 'closeDashboard' + (i + 1); // <== Note the + before (i + 1) to do string
  const hide  = 'hideDashboard' + (i + 1);  // concatenation, was missing from one of yours
  dashArray.push({
    [headArray[i]]: // <== computed property name, note : not , after it
    {
      [close]: dashboardstatus[close], // <== Another computed property name
      [hide]:  dashboardstatus[hide]   // <== And another
    }
  });
}

console.log(dashArray);
.as-console-wrapper {
  max-height: 100% !important;
}

И снова, до ES2015, вам сначала нужно было создать объект, а затем добавить свойства.Тело цикла for будет выглядеть следующим образом:

const close = 'closeDashboard' + (i + 1);
const hide  = 'hideDashboard' + (i + 1);
const obj = {};
const value = {};
value[close] = dashboardstatus[close];
value[hide] = dashboardstatus[hide];
obj[headArray[i]] = value;
dashArray.push(obj);

Тем не менее, вы можете захотеть пересмотреть свою структуру.Очевидно, невозможно сказать наверняка, не зная больше (что выходит за рамки вашего первоначального вопроса), но эта структура выглядит так, как будто она может быть более сложной, чем могла бы быть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...