Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как создать новый массив из массива внутри объекта? (https://javascript.ru/forum/misc/63527-kak-sozdat-novyjj-massiv-iz-massiva-vnutri-obekta.html)

Enkille 13.06.2016 12:35

Как создать новый массив из массива внутри объекта?
 
Использую fullcalendar, которому для получения событий в календарь нужен массив. Сейчас я получаю объект flowJs, внутри которого есть нужный мне массив events. Вопрос: как выбрать этот массив в другую переменную или сделать на него ссылку.

Пример:
var flowJs = {
  "user": "admin",
  "active": true,
  "methodService": 1,
  "events": [
  {
    "title": "Alex Smith",
    "start": "2016-06-15",
    "end": "2016-06-15",
  },
  {
    "title": "John Smith",
    "start": "2016-06-16",
    "end": "2016-06-16",
  }]
}


Чтобы получить:
var events = [
  {
    "title": "Alex Smith",
    "start": "2016-06-15",
    "end": "2016-06-15",
  },
  {
    "title": "John Smith",
    "start": "2016-06-16",
    "end": "2016-06-16",
  }]

Спасибо больше за помощь!

рони 13.06.2016 12:38

Enkille,
:-?
var events = flowJs.events ;

pureJS 13.06.2016 19:00

Enkille, есть два способа:
var events = flowJs.events;
//или так:
var events = flowJs['events'];

Benos 13.07.2016 23:57

Подскажите пожалуйста правильный ли принцип запись данных в объект...
if(!(aJSON.data.Id in Data)){ // проверка наличия 
     Data[aJSON.data.Id] = {}; // новый {} для ID если его нет в Data
}
Data[aJSON.data.Id].name = aJSON.data.name;  
var ReTMP = [];
for(var d = 1; d < 5; d++){ // так надо... с "1" :)   
    ReTMP.push(Number(aJSON.data.prod[d]));     
    ReTMP.push(Math.round(aJSON.data.stor[d])); 
    ReTMP.push(Number(aJSON.data.cap[d]));      
}
Data[aJSON.data.Id].Re = ReTMP; // массив 13
addSum('Re', ReTMP);

function addSum(item, Data){
    if(!("total" in Data)){
          Data["total"] = {};
          Data["total"].name = "Всего";
    }
    for(var i = 1; i < 13; i ++){ // так надо... с "1" :)   
        itemDataSum[i] = itemDataSum[i] + Data[i];
    }
    Data.total[item] = itemDataSum; // исправил...
}

aJSON.data - объект, часть его данных надо переписать в объект Data

Вид объекта Data:
Data = {
         ID1: {
                   name: "Имя",
                   Re:  [1,4,65,2 ..... ]
                }
         ID2: { .... }
         ...............
         total: {
                   name: "Всего",
                   Re:  [1,4,65,2 ..... ]
                }
}

Что то данные по отдельности консоль выводит... а при записи в объект не пашет.

рони 14.07.2016 00:03

Benos,
в строке 22 ничего странного не видите, вы или консоль?

Benos 14.07.2016 00:06

забыл добавить...
aJSON.data.Id - число, возможно играет роль

Benos 14.07.2016 00:08

Цитата:

Сообщение от рони (Сообщение 422001)
Benos,
в строке 22 ничего странного не видите, вы или консоль?

виноват... это я тут ошибся... перебирал варианты...
изначально было так...
Data[total][item] = itemDataSum;
потом
Data.total[item] = itemDataSum;

рони 14.07.2016 00:22

Benos,
если вопрос остался сделайте нормальный макет, чтобы не гадать что такое itemDataSum

Benos 14.07.2016 00:32

Кажись понял где косяк...
addSum('Re', ReTMP); //вызываю функцию с двумя параметрами


function addSum(item, Data){ // item = 'Re', ReTMP = Data

но это не та "Data"... которая объект... это массив ReTMP и в нем я пытаюсь найти ID и записать данные )

З.Ы. Общение с умными людьми... просветляет :)

Benos 14.07.2016 16:24

все таки косяк не нашел...
похоже что то в функции addSum криво...
собрал макет данных JSON ответа и функцию обработки...
все пашет, кроме суммирования...

Если есть возможность посмотрите пожл. кто-нибудь...
https://jsfiddle.net/Benos/3v95bjw5/

рони 14.07.2016 16:49

Benos,
такой результат должен быть?
{
  "537313333": {
    "name": "ельк",
    "Re": [
      1100,
      68031,
      102000,
      1276,
      80732,
      102000,
      1188,
      92247,
      102000,
      1345,
      52458,
      80000
    ]
  },
  "539050004": {
    "name": "Мк",
    "Re": [
      1000,
      16768,
      80000,
      1000,
      5123,
      80000,
      1000,
      22674,
      80000,
      -170,
      52461,
      80000
    ]
  },
  "539115542": {
    "name": "аи",
    "Re": [
      70,
      8585,
      14400,
      70,
      6780,
      14400,
      50,
      2105,
      14400,
      567,
      30584,
      38000
    ]
  },
  "539246594": {
    "name": "ирво",
    "Re": [
      495,
      22853,
      26000,
      465,
      10958,
      26000,
      270,
      3483,
      26000,
      971,
      55432,
      66000
    ]
  },
  "total": {
    "name": "Всего",
    "Re": [
      2665,
      116237,
      222400,
      2811,
      103593,
      222400,
      2508,
      120509,
      222400,
      2713,
      190935,
      264000
    ]
  }
}

Benos 14.07.2016 17:11

Да точно так...

рони 14.07.2016 18:04

Benos,
// обнуляем временный массив с суммой
function cleanTotal(){
    itemDataSum = [];
}

// суммируем данные
function addSum(item, itemArray){
    if(!('total' in Data)){
          Data["total"] = {};
          Data["total"].name = "Всего";
    }
    for(var i = 0; i < itemArray.length; i++){
        itemDataSum[i] = (+itemDataSum[i]||0) + +itemArray[i];
    }
    Data["total"][item] = itemDataSum;
}

Benos 14.07.2016 18:23

рони,
Спасибо! не могу "+" в карму поставить... форум ругается :)

а что значит?
(+itemDataSum[i]||0)

рони 14.07.2016 18:26

Benos,
либо число или "строка-число" из массива или ноль если элемент массива пуст


Часовой пояс GMT +3, время: 16:33.