简体   繁体   English

JavaScript 数据转换问题

[英]JavaScript data conversion issue

In javascript want to data according to my required but I have no idea how to convert data .I am getting data from Fitbit and web api response give json data and I am want to change that data using javascript.在 javascript 中,我想根据我的要求获取数据,但我不知道如何转换数据。我从 Fitbit 获取数据,web api 响应提供 json 数据,我想使用 javascript 更改该数据。 My Api response is show in below..我的 Api 响应如下所示..

0: {date: "2019-4-25"}
1: {distance: "1.0627499999999999"}
2: {minutes: "30"}
3: {calories: "19"}
4: {steps: "750"}

and i am wants to get data likes:-我想获得喜欢的数据:-

 "2019-04-25":{distance: "0.7085",steps: "500"minutes: "20",calories: "187"}

my javascript code is show in below please help me how to get data inside object according to data wise...我的 javascript 代码如下所示,请帮助我如何根据数据明智地获取对象内部的数据...

app.js应用程序.js

let date = new Date();
let todayDate = `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`;
//  let endDate =`${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate() + 1}`;
//   console.log(endDate);
var url = window.location.href;

//getting the access token from url
var access_token = url.split("#")[1].split("=")[1].split("&")[0];

// get the userid
var userId = url.split("#")[1].split("=")[2].split("&")[0];

// console.log(access_token);

var response = [];
var key = "date";
var obj = {};
obj[key] = todayDate;
response.push(obj);
console.log(response);
// Make an API request and graph it
var processResponse = function (res) {
    if (!res.ok) {
        throw new Error('Fitbit API request failed: ' + res);
    }

    var contentType = res.headers.get('content-type')
    if (contentType && contentType.indexOf("application/json") !== -1) {
        return res.json();
    } else {
        throw new Error('JSON expected but received ' + contentType);
    }
}
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://api.fitbit.com/1/user/' + userId + '/activities/steps/date/today/1d.json');
xhr.setRequestHeader("Authorization", 'Bearer ' + access_token);
xhr.onload = function () {
    if (xhr.status === 200) {

        var d1 = xhr.responseText;
        var jsonResponse = JSON.parse(d1);
        var steps = jsonResponse["activities-steps"][0].value;
        console.log("steps:", steps);
        var key = "steps";
        var obj = {};
        obj[key] = steps;
        response.push(obj);

    }
};
xhr.send();
var xhr2 = new XMLHttpRequest();
xhr2.open('GET', 'https://api.fitbit.com/1/user/' + userId + '/activities/distance/date/today/1d.json');
xhr2.setRequestHeader("Authorization", 'Bearer ' + access_token);
xhr2.onload = function () {
    if (xhr2.status === 200) {
        var d2 = xhr2.responseText;
        var jsonResponse = JSON.parse(d2);
        var distance = jsonResponse["activities-distance"][0].value;
        var key = "distance";
        var obj = {};
        obj[key] = distance;
        response.push(obj);
        console.log("distance:", distance);


    }
};
xhr2.send();

var xhr3 = new XMLHttpRequest();
xhr3.open('GET', 'https://api.fitbit.com/1/user/' + userId + '/activities/activityCalories/date/today/1d.json');
xhr3.setRequestHeader("Authorization", 'Bearer ' + access_token);
xhr3.onload = function () {
    if (xhr3.status === 200) {
        var d3 = xhr3.responseText;
        var jsonResponse = JSON.parse(d3);
        var calories = jsonResponse["activities-activityCalories"][0].value;
        var key = "calories";
        var obj = {};
        obj[key] = calories;
        response.push(obj);

        console.log("calories:", calories);
        //document.write(xhr2.responseText);
    }
};
xhr3.send();

var xhr4 = new XMLHttpRequest();
xhr4.open('GET', 'https://api.fitbit.com/1/user/' + userId + '/activities/minutesVeryActive/date/today/1d.json');
xhr4.setRequestHeader("Authorization", 'Bearer ' + access_token);
xhr4.onload = function () {
    if (xhr4.status === 200) {
        var d4 = xhr4.responseText;
        var jsonResponse = JSON.parse(d4);
        var minutes = jsonResponse["activities-minutesVeryActive"][0].value;
        var key = "minutes";
        var obj = {};
        obj[key] = minutes;
        response.push(obj);

        console.log("minutes:", minutes);

    }
};

xhr4.send();

I code it for you ;) You most convert the response to a new object in this way below:我为你编码;) 你最常以下面的方式将响应转换为新对象:

const res = {
  0: {date: "2019-4-25"},
  1: {distance: "1.0627499999999999"},
  2: {minutes: "30"},
  3: {calories: "19"},
  4: {steps: "750"},
}

const resconverted = {
  [res[0].date] : {
   'distance':res[1].distance,
   'minutes':res[2].minutes,
   'calories':res[3].calories,
   'steps':res[4].steps
 }
}


console.log(res);
console.log(resconverted);

Whether that first segment of code you show is an Array or an Object this should work:无论您显示的第一段代码是数组还是对象,这都应该有效:

 var obj = { '0': {date: "2019-4-25"}, '1': {distance: "1.0627499999999999"}, '2': {minutes: "30"}, '3': {calories: "19"}, '4': {steps: "750"} }; var res = {}; res[obj[0].date] = { distance:obj[1].distance, steps:obj[4].steps, minutes:obj[2].minutes, calories:obj[3].calories }; console.log(res); var array = [ {date: "2019-4-25"}, {distance: "1.0627499999999999"}, {minutes: "30"}, {calories: "19"}, {steps: "750"} ]; var res2 = {}; res2[array[0].date] = { distance:array[1].distance, steps:array[4].steps, minutes:array[2].minutes, calories:array[3].calories } console.log(res2);

Of course you should know Object property order depends on the Browser.当然你应该知道对象属性顺序取决于浏览器。

Use this and dynamically convert response:使用此并动态转换响应:

const res = {
  0: {date: "2019-4-25"},
  1: {distance: "1.0627499999999999"},
  2: {minutes: "30"},
  3: {calories: "19"},
  4: {steps: "750"},
}

let k =[];
let v =[]
Object.getOwnPropertyNames(res).map((key)=>{  
  p =Object.getOwnPropertyNames(res[key]).map((key1,index)=>{  
    k.push(key1);
    v.push(res[key][key1]);
  })
})

let o = {} ;
for(i=0; i<k.length;i++)
{
 o[k[i]] = v[i];
}

console.log(o);

it's dirty code clean it ;)这是脏代码清理它;)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM