繁体   English   中英

数组不排序sort(); 我从json.parsed Javascript的GET请求中得到

[英]Arrays is not sorting whit sort(); that i get out of an Get request from json that is json.parsed Javascript

我试图从发送json的API获取数据,但我成功检索了数据并将其全部推送到1个数组中,但是问题是当我对数组进行排序然后进行console.log ,由于某种原因它仍然是随机的,或者有时它没有甚至不会从API中提取所有数据,因此排序时我不会在日志中获取所有数据。 (仍然是随机的)

script.js

"use strict";

const dataLinks = [
  "https://api.data.amsterdam.nl/bbga/cijfers/",
  "https://api.data.amsterdam.nl/bbga/gebieden/",
  "https://api.data.amsterdam.nl/bbga/groepen/",
  "https://api.data.amsterdam.nl/bbga/meta/",
  "https://api.data.amsterdam.nl/bbga/themas/",
  "https://api.data.amsterdam.nl/bbga/variabelen/"
];

const allDataInArray = [];
let ResetNumber = 0;

init();

//Go thruw all links
function init() {
  for (ResetNumber = 0; ResetNumber < dataLinks.length; ResetNumber++) {
    GetAllData(dataLinks[ResetNumber]);
  }
  makeArrays();
}

//Open the links in a get GET request
//then make from the json an Array
//push all into 1 array
function GetAllData(hrefLink) {
  let xmlhttp = new XMLHttpRequest();
  xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      let myObj = JSON.parse(this.responseText);
      // console.log(myObj)
      allDataInArray.push(myObj);
    }
  };
  xmlhttp.open("GET", hrefLink, true);
  xmlhttp.send();
}

function makeArrays() {
  allDataInArray.sort();
  console.log(allDataInArray);

}

默认情况下,sort()方法将这些值按字母和升序排序为字符串。 如果要对对象或数字的数组进行排序,则将其与比较函数array.sort(compareFunction)

您在这里有两个问题。

第一个原则是您的返回值是Object ,您将必须定义一个自定义排序函数以传递给Array.sort以获得正确排序的结果。

另一个问题是,您必须等待所有请求完成后才能对结果数组进行排序。 一种标准的方法是使用Promise.allfetch (将请求包装到Promise )。

您可以使用以下代码作为模板,并填写sortFunction的定义以使其完全起作用。

const dataLinks = [
    "https://api.data.amsterdam.nl/bbga/cijfers/",
    "https://api.data.amsterdam.nl/bbga/gebieden/",
    "https://api.data.amsterdam.nl/bbga/groepen/",
    "https://api.data.amsterdam.nl/bbga/meta/",
    "https://api.data.amsterdam.nl/bbga/themas/",
    "https://api.data.amsterdam.nl/bbga/variabelen/"
];

let allDataInArray;

Promise.all(dataLinks.map(link => fetch(link).then(response => { if (response.ok) { return response.json(); }})))
.then(result => { allDataInArray = result.sort(sortFunction); })

请注意,任何要使用allDataInArray代码也必须等待。 您可以为此实现观察者模式。

暂无
暂无

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

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