Как установить объект данных из данных массива ответов - PullRequest
0 голосов
/ 08 ноября 2018

у меня есть данные ответа, подобные этому

{
  "data": {
    "title": "dashboard",
    "description": "just test dashboard",
    "photos": [
      {
        "file_name": "12345454.jpg",
        "photo_name": "indonesia"
      },
      {
        "file_name": "567686.jpg",
        "photo_name": "jakarta"
      }]
  }
}

, тогда мне нужно изменить ответ данных с именем file_name массива без переменной photos.

ожидается: file_name [0] будет знаком из file_nameиндекс массива

вот так

{
  "data": {
    "title": "dashboard",
    "description": "just test dashboard",
    "file_name[0]": "12345454.jpg",
    "file_name[1]": "567686.jpg"
  }
}

Я пробовал с картой фотографий, но не работал

this.data = this.data.photos.map((item, idx) => {
    let data = {
      file_name: item.file_name
    }
    return data
  })
  this.data.photos.map((item, idx) => {
    this.$set(this.data, 'file_name', item.file_name)
  })

Ответы [ 4 ]

0 голосов
/ 08 ноября 2018

посмотрите на этот пример. с помощью этого вы можете реструктурировать или создать новый JSON.

<span id="text"></span><br/>
<span id="photosdata"></span>

вот логика

var obj = JSON.parse('{   "data": {     "title": "dashboard",     "description": "just test dashboard",     "photos": [       {         "file_name": "12345454.jpg",         "photo_name": "indonesia"       },       {         "file_name": "567686.jpg",         "photo_name": "jakarta"       }]   } }');

document.getElementById("text").innerHTML = obj.data.title+"<br/>";

var photos = obj.data.photos;

photos.forEach(function(item){
 document.getElementById("text").innerHTML += item.file_name +"<br/>";
});

https://jsfiddle.net/qufnwmd4/1/

0 голосов
/ 08 ноября 2018

Я предлагаю решение, создающее новый объект.

@ Nikhil Aggarwal soluce видоизменяет существующий объект

Оба хороши, выберите свой яд:)

const old = {
  data: {
    title: 'dashboard',
    description: 'just test dashboard',
    photos: [
      {
        file_name: '12345454.jpg',
        photo_name: 'indonesia',
      },
      {
        file_name: '567686.jpg',
        photo_name: 'jakarta',
      }],
  },
};

const formatted = {
  // We use reduce to create the data object
  data: Object.keys(old.data).reduce((tmp, x) => {
    // If we are not dealing with photos key, just add the old data to the new object
    if (x !== 'photos') {
      tmp[x] = old.data[x];
      
      return tmp;
    }
    
    // for each photo, add a new key
    old.data.photos.forEach((y, yi) => {
      tmp[`file_name[${yi}]`] = y.file_name;
    });
    
    return tmp;
  }, {}),
};

console.log(formatted);
0 голосов
/ 08 ноября 2018

Если я правильно понимаю, вы действительно хотите, чтобы file_name был массивом. Если это так, и вы рады изменить объект на месте, попробуйте:

const obj = {
  data: {
    title: 'dashboard',
    description: 'just test dashboard',
    photos: [
      {
        file_name: '12345454.jpg',
        photo_name: 'indonesia'
      },
      {
        file_name: '567686.jpg',
        photo_name: 'jakarta'
      }]
  },
}

obj.data.file_name = obj.data.photos.map(i => i.file_name)
delete obj.data.photos

console.log(obj)
0 голосов
/ 08 ноября 2018

Попробуйте выполнить

let data = {"title": "dashboard","description": "just test dashboard","photos":[{"file_name": "12345454.jpg","photo_name": "indonesia"},{"file_name": "567686.jpg","photo_name": "jakarta"}]};

data.photos.forEach((v,i) => data[`file_name[${i}]`] = v.file_name);
delete data.photos;
console.log(data);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...