обрезать объект JS для удаления лишних параметров с помощью фигурных скобок - PullRequest
1 голос
/ 02 октября 2019

У меня есть ответ объекта здесь

result.joblist = {
  "collection_job_status_list": [
    {
      "application_context": {
        "application_id": "a4",
        "context_id": "c4"
      },
      "creation_time": "15699018476102",
      "progress": 100,
      "status": "READY",
      "phase": "ACTIVE",
      "job_error": {}
    },
    {
      "application_context": {
        "application_id": "a6",
        "context_id": "c6"
      },
      "creation_time": "15698648632523",
      "progress": 100,
      "status": "READY",
      "phase": "ACTIVE",
      "job_error": {}
    }
  ],
  "result": {
    "request_result": "ACCEPTED",
    "error": {}
  }
}

Нужно избавиться от {"application_context": & ending } здесь, просто нужно application_id":"a4","context_id":"c4" на том же уровне.

Я пробовал что-то подобное, но не смог продвинуться вперед.

var newObj: any = {};
if (allJobs && allJobs.length > 0) {
  // this.rowData = this.allJobs;
  // this.allJobs = this.allJobs['application_id'];
  //let ele:object = allJobs.application_context;
  allJobs.forEach(ele => {
    newObj = {
      application_id: ele.application_context.application_id,
      context_id: ele.application_context.application_context
    };
    return newObj;
  });
}

Ответы [ 3 ]

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

Вы можете использовать map и destructuring

  • Получить collection_job_status_list из результата
  • Зацикливание значений извлекает необходимые значения из клавиши application_context иобъединить с оставшимися значениями
  • Построить ту же структуру, что и исходный результат

let result = {"collection_job_status_list": [{"application_context": {"application_id": "a4","context_id": "c4"},"creation_time": "15699018476102","progress": 100,"status": "READY","phase": "ACTIVE","job_error": {}},{"application_context": {"application_id": "a6","context_id": "c6"},"creation_time": "15698648632523","progress": 100,"status": "READY","phase": "ACTIVE","job_error": {}}],"result": {"request_result": "ACCEPTED","error": {}}}

let { collection_job_status_list, ...rest } = result

let modified = collection_job_status_list.map(({
  application_context: {
    application_id,
    context_id
  },
  ...rest
}) => ({ ...rest, context_id, application_id}))

let final = {
  collection_job_status_list: modified,
  ...rest
}

console.log(final)
0 голосов
/ 02 октября 2019

Здесь вам нужна карта. Справка: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

Попробуйте изменить код, как показано ниже, и вы получите ожидаемый результат.

var newObj: any = {};
var newArray;
if (allJobs && allJobs.length > 0) {
  newArray = allJobs.map(ele => {
    newObj = {
      application_id: ele.application_context.application_id,
      context_id: ele.application_context.application_context
    };
    return newObj;
  });
}

Надеюсь, это поможет:)

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

Вам необходимо использовать функцию map

const result = {};
result.joblist = {
  "collection_job_status_list": [
    {
      "application_context": {
        "application_id": "a4",
        "context_id": "c4"
      },
      "creation_time": "15699018476102",
      "progress": 100,
      "status": "READY",
      "phase": "ACTIVE",
      "job_error": {}
    },
    {
      "application_context": {
        "application_id": "a6",
        "context_id": "c6"
      },
      "creation_time": "15698648632523",
      "progress": 100,
      "status": "READY",
      "phase": "ACTIVE",
      "job_error": {}
    }
  ],
  "result": {
    "request_result": "ACCEPTED",
    "error": {}
  }
}


result.joblist.collection_job_status_list = result.joblist.collection_job_status_list.map(item => {
  return {
     "application_id": item.application_context.application_id,
     "context_id": item.application_context.context_id
  }
})

console.log(result)

Или вы можете использовать функцию map вместе с сокращенным синтаксисом es6

const result = {};
result.joblist = {
  "collection_job_status_list": [
    {
      "application_context": {
        "application_id": "a4",
        "context_id": "c4"
      },
      "creation_time": "15699018476102",
      "progress": 100,
      "status": "READY",
      "phase": "ACTIVE",
      "job_error": {}
    },
    {
      "application_context": {
        "application_id": "a6",
        "context_id": "c6"
      },
      "creation_time": "15698648632523",
      "progress": 100,
      "status": "READY",
      "phase": "ACTIVE",
      "job_error": {}
    }
  ],
  "result": {
    "request_result": "ACCEPTED",
    "error": {}
  }
}


result.joblist.collection_job_status_list = result.joblist.collection_job_status_list.map(({application_context}) => {
  return {
     ...application_context
  }
})

console.log(result)

РЕДАКТИРОВАТЬ:

То, что вы хотите сохранить в своем массиве, зависит от того, что вы возвращаете из map. Вы возвращаете ключи, которые хотите сохранить. Поэтому, если вам нужны другие элементы.

Если у вас есть массив A

A = [
  {
    nest: {
      x: 1,
      y: 1,
    },
    key1: 5,
    key2: 7,
  },
  {
    nest: {
      x: 1,
      y: 1,
    },
    key1: 5,
    key2: 7,
  },
  {
    nest: {
      x: 1,
      y: 1,
    },
    key1: 5,
    key2: 7,
  }
]

Допустим, вы хотите x из nest, key1 и key2 в вашемокончательный вывод. Затем вы будете делать

const finalOutput = A.map(item => {
  return {
     x: item.nest.x, // x from nest
     key1: item.key1, // key1
     key2: item.key2,  // key2
  }
})

Но есть сокращенные формы для этого. Давайте предположим, что item, которое мы получаем в нашем map function, уже разделено на переменные nest и rest. nest содержит item.nest, а rest равно {key1: 5,key2:7}, тогда вы можете просто вернуть x из nest и все остальное из rest

const finalOutput = A.map(({nest, ...rest}) => {
  return {
     x: nest.x, // x from nest
     ...rest, // everything else
  }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...