Преобразовать свойство объекта с помощью строкового индекса в нотацию - PullRequest
0 голосов
/ 28 августа 2018

Я немного почесал голову этим. У меня есть URL следующим образом

http://localhost:50303/Directory?SearchUnits=km&Postcode=NG1%202AD&&Position[south]=53.9480673197085&Position[west]=-1.1444808302915135&Position[north]=52.9507652802915&Position[east]=-1.1417828697085497

Когда я получаю параметры запроса, используя angularjs, вот так

var qs = $location.search();

Я получаю такой объект

{ 
  SearchUnits: "km", 
  Postcode: "NG1 2AD", 
  "Position[south]": "53.9480673197085", 
  "Position[west]": "-1.1444808302915135", 
  "Position[north]": "52.9507652802915", 
  "Position[east]": "-1.1417828697085497" 
}

Однако мне нужно, чтобы это выглядело так

{ 
  SearchUnits: "km", 
  Postcode: "NG1 2AD", 
  Position: { 
     south: "53.9480673197085", 
     west: "-1.1444808302915135", 
     north: "52.9507652802915", 
     east: "-1.1417828697085497"
  }
}

Как мне разобрать это? Я пробовал разбивать на строки, а затем разбирать, но это не сработает, любая помощь будет признательна

1 Ответ

0 голосов
/ 28 августа 2018

Если значения ключей являются статическими, преобразовать их довольно легко, просто переберите массив ['south', 'west', 'north', 'east'] и извлеките значения / назначьте / удалите, если необходимо:

const obj = { 
  SearchUnits: "km", 
  Postcode: "NG1 2AD", 
  "Position[south]": "53.9480673197085", 
  "Position[west]": "-1.1444808302915135", 
  "Position[north]": "52.9507652802915", 
  "Position[east]": "-1.1417828697085497" 
};
const Position = {};
obj.Position = Position;
['south', 'west', 'north', 'east'].forEach((key) => {
  const inputKey = `Position[${key}]`;
  Position[key] = obj[inputKey];
  delete obj[inputKey];
});


console.log(obj);
...