Javascript, как превратить данные из объектов JSON в один массив из ключей в ES6 - PullRequest
0 голосов
/ 17 октября 2019

данные, которые я получаю из API, например:

{ 
   "lclWarehouseId":11,
   "name":"asdasd",
   "country":{ 
      "id":1,
      "name":"Indonesia"
   },
   "city":{ 
      "id":1,
      "countryId":1,
      "name":"Jakarta"
   },
   "address":"asdasd",
   "phone":"+62123123",
   "fax":"+62123123",
   "monday":{ 
      "isOpen":true,
      "start":"0000-01-01T14:43:20+07:00",
      "end":"0000-01-01T15:43:23+07:00"
   },
   "tuesday":{ 
      "isOpen":false,
      "start":"0000-01-01T00:00:00Z",
      "end":"0000-01-01T00:00:00Z"
   },
   "wednesday":{ 
      "isOpen":false,
      "start":"0000-01-01T00:00:00Z",
      "end":"0000-01-01T00:00:00Z"
   },
   "thursday":{ 
      "isOpen":false,
      "start":"0000-01-01T00:00:00Z",
      "end":"0000-01-01T00:00:00Z"
   },
   "friday":{ 
      "isOpen":false,
      "start":"0000-01-01T00:00:00Z",
      "end":"0000-01-01T00:00:00Z"
   },
   "saturday":{ 
      "isOpen":false,
      "start":"0000-01-01T00:00:00Z",
      "end":"0000-01-01T00:00:00Z"
   },
   "sunday":{ 
      "isOpen":false,
      "start":"0000-01-01T00:00:00Z",
      "end":"0000-01-01T00:00:00Z"
   }
}

Я хочу получить все ключи за дни (понедельник-воскресенье) и превратить их в один массив, что-то вроде этого:

[ 
   { 
      "isOpen":true,
      "start":"0000-01-01T14:43:20+07:00",
      "end":"0000-01-01T14:43:20+07:00",

   },
   { 
      "isOpen":true,
      "start":"0000-01-01T14:43:20+07:00",
      "end":"0000-01-01T14:43:20+07:00",

   },
   { 
      "isOpen":true,
      "start":"0000-01-01T14:43:20+07:00",
      "end":"0000-01-01T14:43:20+07:00",

   },
   { 
      "isOpen":true,
      "start":"0000-01-01T14:43:20+07:00",
      "end":"0000-01-01T14:43:20+07:00",

   },
   { 
      "isOpen":true,
      "start":"0000-01-01T14:43:20+07:00",
      "end":"0000-01-01T14:43:20+07:00",

   },
   { 
      "isOpen":true,
      "start":"0000-01-01T14:43:20+07:00",
      "end":"0000-01-01T14:43:20+07:00",

   },

]

возможно ли сделать это в ES6? спасибо:]

Ответы [ 6 ]

2 голосов
/ 17 октября 2019

Сначала выберите соответствующих ключей (со значениями) из объекта, а затем преобразуйте его в нужный массив.

const object = {
  "lclWarehouseId": 11,
  "name": "asdasd",
  "country": {
    "id": 1,
    "name": "Indonesia"
  },
  "city": {
    "id": 1,
    "countryId": 1,
    "name": "Jakarta"
  },
  "address": "asdasd",
  "phone": "+62123123",
  "fax": "+62123123",
  "monday": {
    "isOpen": true,
    "start": "0000-01-01T14:43:20+07:00",
    "end": "0000-01-01T15:43:23+07:00"
  },
  "tuesday": {
    "isOpen": false,
    "start": "0000-01-01T00:00:00Z",
    "end": "0000-01-01T00:00:00Z"
  },
  "wednesday": {
    "isOpen": false,
    "start": "0000-01-01T00:00:00Z",
    "end": "0000-01-01T00:00:00Z"
  },
  "thursday": {
    "isOpen": false,
    "start": "0000-01-01T00:00:00Z",
    "end": "0000-01-01T00:00:00Z"
  },
  "friday": {
    "isOpen": false,
    "start": "0000-01-01T00:00:00Z",
    "end": "0000-01-01T00:00:00Z"
  },
  "saturday": {
    "isOpen": false,
    "start": "0000-01-01T00:00:00Z",
    "end": "0000-01-01T00:00:00Z"
  },
  "sunday": {
    "isOpen": false,
    "start": "0000-01-01T00:00:00Z",
    "end": "0000-01-01T00:00:00Z"
  }
};

const days = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'];


const pick = function(object, allowedKeys) {
  const newObject = {};
  allowedKeys.forEach((key) => {
    if (key in object) {
      newObject[key] = object[key];
    }
  });
  return newObject;
};

const subset = pick(object, days);

const result = Object.keys(subset).map((day) => subset[day]);

console.log(result);
2 голосов
/ 17 октября 2019

Это работает для меня - использую магию ES6

var data = { // your data
}

// Extract all values from JSON into an array
var arrAsKeys = Object.values(data)

// The values belonging to days will have data.start as a property
var requiredData = arrAsKeys.filter(day => day.hasOwnProperty('start'))
console.log(requiredData)
0 голосов
/ 17 октября 2019

ES6 way

Вы также можете использовать Object.values, но это не часть ES6, она включена в ES8 8-е издание Object.values ​​

let a = { 
   "lclWarehouseId":11,
   "name":"asdasd",
   "country":{ 
      "id":1,
      "name":"Indonesia"
   },
   "city":{ 
      "id":1,
      "countryId":1,
      "name":"Jakarta"
   },
   "address":"asdasd",
   "phone":"+62123123",
   "fax":"+62123123",
   "monday":{ 
      "isOpen":true,
      "start":"0000-01-01T14:43:20+07:00",
      "end":"0000-01-01T15:43:23+07:00"
   },
   "tuesday":{ 
      "isOpen":false,
      "start":"0000-01-01T00:00:00Z",
      "end":"0000-01-01T00:00:00Z"
   },
   "wednesday":{ 
      "isOpen":false,
      "start":"0000-01-01T00:00:00Z",
      "end":"0000-01-01T00:00:00Z"
   },
   "thursday":{ 
      "isOpen":false,
      "start":"0000-01-01T00:00:00Z",
      "end":"0000-01-01T00:00:00Z"
   },
   "friday":{ 
      "isOpen":false,
      "start":"0000-01-01T00:00:00Z",
      "end":"0000-01-01T00:00:00Z"
   },
   "saturday":{ 
      "isOpen":false,
      "start":"0000-01-01T00:00:00Z",
      "end":"0000-01-01T00:00:00Z"
   },
   "sunday":{ 
      "isOpen":false,
      "start":"0000-01-01T00:00:00Z",
      "end":"0000-01-01T00:00:00Z"
   }
}

const days = ["monday", "tuesday","wednesday", "thursday",  "friday","saturday","sunday" ]
let arr = []
Object.keys(a).forEach(key => {
  if(days.includes(key)){
      arr.push(a[key])
    }
  })
  
  console.log(arr)
0 голосов
/ 17 октября 2019

Если вам нужно сделать это динамически.

Object.values(array).filter(value => typeof value === 'object' && value["start"]);
0 голосов
/ 17 октября 2019

Я не уверен, зачем вам ES6 для этого. Если у вас есть ответ в json с именем resp, вы можете просто написать

[resp.monday, resp.tuesday, ... resp.sunday]

Это даст требуемый массив

0 голосов
/ 17 октября 2019

Это может вам помочь.

var array = { 
   "lclWarehouseId":11,
   "name":"asdasd",
   "country":{ 
      "id":1,
      "name":"Indonesia"
   },
   "city":{ 
      "id":1,
      "countryId":1,
      "name":"Jakarta"
   },
   "address":"asdasd",
   "phone":"+62123123",
   "fax":"+62123123",
   "monday":{ 
      "isOpen":true,
      "start":"0000-01-01T14:43:20+07:00",
      "end":"0000-01-01T15:43:23+07:00"
   },
   "tuesday":{ 
      "isOpen":false,
      "start":"0000-01-01T00:00:00Z",
      "end":"0000-01-01T00:00:00Z"
   },
   "wednesday":{ 
      "isOpen":false,
      "start":"0000-01-01T00:00:00Z",
      "end":"0000-01-01T00:00:00Z"
   },
   "thursday":{ 
      "isOpen":false,
      "start":"0000-01-01T00:00:00Z",
      "end":"0000-01-01T00:00:00Z"
   },
   "friday":{ 
      "isOpen":false,
      "start":"0000-01-01T00:00:00Z",
      "end":"0000-01-01T00:00:00Z"
   },
   "saturday":{ 
      "isOpen":false,
      "start":"0000-01-01T00:00:00Z",
      "end":"0000-01-01T00:00:00Z"
   },
   "sunday":{ 
      "isOpen":false,
      "start":"0000-01-01T00:00:00Z",
      "end":"0000-01-01T00:00:00Z"
   }
};

const {monday, tuesday, wednesday, thursday, friday, saturday, sunday} = array;

console.log([monday, tuesday, wednesday, thursday, friday, saturday, sunday])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...