Как создать имена вар в Javascript из свойства JSON - PullRequest
0 голосов
/ 09 января 2019

Мне нужно установить простую переменную в Javascript, названную в честь свойств JSON из цикла в каждой строке JSON. Их значения также будут получены из JSON.

Например, вот мой шаблон: var paris = {lat: 48.866667, lng: 2.333333};

Но с петлей на рядах Json var json [i] .code = {lat: json [i] .latitude , lng: json [i] .longitude };

Вот мой код JS, пока я не мог понять, как заставить его работать ... Спасибо за вашу драгоценную помощь.

function initMap() {

  //my template 
    var paris = {lat: 48.866667, lng: 2.333333};

    //my actual data
    var json=[{"code":"london","latitude":"50.633333","longitude":"3.066667"},{"code":"berlin","latitude":"47.478419","longitude":"-0.563166"}];            

    //my code to create my vars from Json
    for( var i=0;i< json.length; i++ ){
        var json[i].code = "{lat:" + json[i].latitude + " , lng: " +json[i].longitude +" }";
        }
    }
}

Ответы [ 4 ]

0 голосов
/ 09 января 2019

Если я правильно понимаю, вы пытаетесь создать отдельную переменную для каждой строки.

Это можно сделать либо с помощью глобальных переменных, используя свойство окна, либо, если вы хотите, чтобы оно было локально ограничено функцией, вместо этого вы можете создать локальный родительский объект.

//Defining the variables globally
function initMapGlobal() {

    //my template 
    var paris = {
        lat: 48.866667,
        lng: 2.333333
    };

    //my actual data
    var json = [{
        "code": "london",
        "latitude": "50.633333",
        "longitude": "3.066667"
    }, {
        "code": "berlin",
        "latitude": "47.478419",
        "longitude": "-0.563166"
    }];

    //my code to create my vars from Json
    for (var i = 0; i < json.length; i++) {
        window[json[i].code] = JSON.parse('{"lat":' + json[i].latitude + ' , "lng": ' + json[i].longitude + ' }');
    }
}

initMapGlobal();
console.log('Outside of Function - Global');
console.log('Variable Value: ', london);
console.log('Value of London Latitude: ', london.lat);
console.log('\n**************\n');


//Defining the variables local to the function
function initMapLocal() {
    var cityParent = {};

    //my template 
    var paris = {
        lat: 48.866667,
        lng: 2.333333
    };

    //my actual data
    var json = [{
        "code": "london",
        "latitude": "50.633333",
        "longitude": "3.066667"
    }, {
        "code": "berlin",
        "latitude": "47.478419",
        "longitude": "-0.563166"
    }];

    //my code to create my vars from Json
    for (var i = 0; i < json.length; i++) {
        cityParent[json[i].code] = JSON.parse('{"lat":' + json[i].latitude + ' , "lng": ' + json[i].longitude + ' }');
    }

    console.log('Inside of function:');
    console.log('Variable Value: ', cityParent.london);
    console.log('Value of London Latitude: ', cityParent.london.lat);
    console.log('\n**************\n');
}


initMapLocal();
console.log('Outside of function: (these will crash because they are local)');
console.log('Variable Value: ', cityParent.london);
console.log('Value of London Latitude: ', cityParent.london.lat);
0 голосов
/ 09 января 2019

Вот преобразование с использованием Array.reduce, которое работает обратно в IE10:

function initMap() {
  //Your template 
  var paris = {lat: 48.866667, lng: 2.333333};

  //Your actual data
  var json =[
    {"code":"london","latitude":"50.633333","longitude":"3.066667"},
    {"code":"berlin","latitude":"47.478419","longitude":"-0.563166"}
  ]; 

  //Code to create new Object
  var newObj = json.reduce((obj, data) => {
    obj[data.code] = {lat:data.latitude, lng: data.longitude};
    return obj;
  }, {});
  
  console.log(JSON.stringify(newObj,0,2));
}

initMap();

Это преобразует каждую запись в запись в новом объекте, используя значение для code в качестве ключа, а новые данные - это объект, который соответствует вашим требованиям.

0 голосов
/ 09 января 2019

Во-первых, когда объявляется переменная, вы не должны использовать ключевое слово var до этого: var json[i].code, juste write: json[i].code.

Затем, когда вы используете JSON внутри своего кода, вам не нужно помещать что-либо между двумя "" в Javascript.

Просто сделайте это:

{
  latitude: 50.6,
  longitude: 50.7
}

А не это:

"{
  latitude: 50.6,
  longitude: 50.7
}"

Тогда у вас есть результат:

function initMap() {
    var paris = {
        lat: 48.866667,
        lng: 2.333333
    };

    var json = [
        {
            code: "london",
            latitude: 50.633333,
            longitude: 3.066667
        },
        {
            code: "berlin",
            latitude: 47.478419,
            longitude: -0.563166
        }
    ];            

    //my code to create my vars from Json
    for(var i = 0; i < json.length; i++){
        json[i] = {
            code: json[i].code,
            lat: json[i].latitude,
            lng: json[i].longitude
        };
    }
    
    console.log(json);
}

initMap();
0 голосов
/ 09 января 2019
function initMap() {

  //my template 
    var paris = {lat: 48.866667, lng: 2.333333};

    //my actual data
    var json=[{"code":"london","latitude":"50.633333","longitude":"3.066667"},{"code":"berlin","latitude":"47.478419","longitude":"-0.563166"}];            

    //my code to create my vars from Json
    for( var i=0;i< json.length; i++ ){
        var obj = {};
        obj.lat = json[i].latitude;
        obj.lng = json[i].longitude;
        window[json[i].code] = obj;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...