JavaScript: извлечение свойств из объекта JSON - PullRequest
0 голосов
/ 10 июня 2018

Постановка задачи: У меня есть объект 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.log(JSON.stringify(jsonObj));

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

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

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

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

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

Ответы [ 4 ]

0 голосов
/ 10 июня 2018

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

Мое решение:

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.log(JSON.stringify(newObj(jsonObj, 20)));
0 голосов
/ 10 июня 2018

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

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.log(result);
0 голосов
/ 10 июня 2018

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


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

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

console.log(JSON.stringify(
  jsonObj,
  (key, value) => !key || toKeep.indexOf(key) > -1 ? value : undefined,
));
0 голосов
/ 10 июня 2018

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.log(newObj);

Это может решить вашу проблему, я чувствую.

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