JavaScript: извлечение свойств из объекта JSON

Постановка задачи : У меня есть объект JSON, содержащий количество свойств n внутри него. Мне нужно передать некоторые свойства из этого объекта JSON в виде строки JSON на сервер.

Пытался : Я использовал метод Object.defineProperty (), чтобы сделать enumerable как false свойств объекта, которые я не хочу передавать в моем JSON string. Пожалуйста, найдите ниже фрагмент кода, чтобы получить более четкое представление.

var jsonObj = {
  "name": "Rohit",
  "age": 27,
  "city": "Gurgaon"
};

Object.defineProperty(jsonObj, 'name', {
  enumerable: false
});

console.info(JSON.stringify(jsonObj));

Проблема с приведенным выше кодом:

Предположим, у меня есть количество свойств 100 в объекте, и я хочу передать серверу только свойства 20 из 100. Затем мне нужно написать ниже строку кода 80 раз, чтобы удалить нежелательные свойства, и это повлияет на производительность приложения.

Object.defineProperty(jsonObj, 'name', { enumerable: false });

Я также рассмотрел уже заданные вопросы по SO, но не нашел подходящего ответа на эту постановку проблемы.

Есть ли лучший способ добиться этого?

Как вы решаете, какие свойства отправлять на сервер? У вас есть массив названий свойств?

31piy 10.06.2018 09:19

Вы сравнивали, не было бы быстрее отправить весь объект на сервер?

baao 10.06.2018 09:21
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
4 408
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

var jsonObj = {
  "name": "Rohit",
  "age": 27,
  "city": "Gurgaon"
};

var newObj = jsonObj;
var arr = ["name","age"];

for(var i=0;i<arr.length;i++){
  delete newObj[arr[i]]
}

console.info(newObj);

Думаю, это может решить вашу проблему.

Попробуйте следующее, это не изменит ваш исходный объект:

var jsonObj = {
  "name": "Rohit",
  "age": 27,
  "city": "Gurgaon"
};
var storePropeties = ["city"];
var result = Object.keys(jsonObj).reduce(function (obj, key) {
   if (storePropeties.includes(key))
      obj[key] = jsonObj[key];
     return obj
 }, {})

console.info(result);
Ответ принят как подходящий

Всегда есть возможность создать новый объект и вытащить только нужные вам ключи. См. Однострочный, чтобы взять некоторые свойства из объекта в ES 6 для этого.


JSON.stringify принимает функцию «заменитель» в качестве второго аргумента. Это позволяет вам изменять значения во время сериализации, включая их фильтрацию. Предполагая, что вы хотите сохранить меньше свойств, вы должны перечислить их в массиве или Set.

var jsonObj = {
  "name": "Rohit",
  "age": 27,
  "city": "Gurgaon"
};
var toKeep = ['age', 'city']; 

console.info(JSON.stringify(
  jsonObj,
  (key, value) => !key || toKeep.indexOf(key) > -1 ? value : undefined,
));

Вы должны создать новый объект, который хотите отправить на сервер.

Мое решение:

var jsonObj = {
  "name": "Rohit",
  "age": 27,
  "city": "Gurgaon"
};

// if you don't need specific keys you should delete this and ~keys.indexOf(prop) in condition
var keys = ['name', 'city', 'moscow'];

function newObj(obj, count) {
  var newObj = {};
  var counter = count;

  for (var prop in obj) {
    if (jsonObj.hasOwnProperty(prop) && ~keys.indexOf(prop)) {
      newObj[prop] = obj[prop];
      counter -= 1;
    }

    if (counter === 0) break;
  }

  return newObj;
}

console.info(JSON.stringify(newObj(jsonObj, 20)));
for...in может перебирать свойства в произвольном порядке, поэтому будет выбрано 20 случайных свойств?
Felix Kling 10.06.2018 09:39

@FelixKling, я не понимаю твой вопрос

zemil 10.06.2018 12:51

Думаю, мне следует превратить это в утверждение: это решение выберет 20 произвольных свойств, что, похоже, не то, что хочет OP.

Felix Kling 10.06.2018 17:14

@FelixKling, а теперь? Я поменял код :) тебе нравится?

zemil 10.06.2018 17:49

Другие вопросы по теме