Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数组未使用sort()进行排序;我从json的get请求中得到了json.parsed Javascript_Javascript_Json_Ajax - Fatal编程技术网

数组未使用sort()进行排序;我从json的get请求中得到了json.parsed Javascript

数组未使用sort()进行排序;我从json的get请求中得到了json.parsed Javascript,javascript,json,ajax,Javascript,Json,Ajax,我试图从发送json的API中获取数据,我成功地检索了数据并将其全部放入1个数组中,但问题是,当我对数组进行排序,然后console.log时,由于某种原因,它仍然是随机的,或者有时它甚至没有从API中提取所有数据,因此当它运行时,我无法获取日志中的所有数据种类。(这仍然是随机的) script.js "use strict"; const dataLinks = [ "https://api.data.amsterdam.nl/bbga/cijfers/", "https://api

我试图从发送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);

}
“严格使用”;
常量数据链接=[
"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/"
];
常量allDataInArray=[];
设ResetNumber=0;
init();
//浏览所有链接
函数init(){
对于(ResetNumber=0;ResetNumber
默认情况下,sort()方法按字母顺序和升序将值作为字符串进行排序。 若要对数组中的对象或数字进行排序,请将其与比较函数一起使用
array.sort(compareFunction)
默认情况下,sort()方法将值按字母顺序和升序排序为字符串。 若要对数组中的对象或数字进行排序,请将其与比较函数一起使用
array.sort(compareFunction)
这里有两个问题

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

另一个问题是,在对结果数组进行排序之前,必须等待所有请求完成。实现这一点的标准方法是使用
Promise.all
fetch
(将请求包装成
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
的代码也必须等待。您可以为此实现观察器模式。

这里有两个问题

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

另一个问题是,在对结果数组进行排序之前,必须等待所有请求完成。实现这一点的标准方法是使用
Promise.all
fetch
(将请求包装成
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
的代码也必须等待。您可以为此实现观测者模式。

提示:这是一个同步性问题。基本上,你可以在一个事件中改变你的代码,在排序之前等待获取所有数据。而且,这也是一个多维数组,即使我在上面加上5秒的超时,获取所有数组仍然无法排序@hintDifferent数据结构的codtex ty来自不同的端点。你想要的结果是什么,你想如何对数据进行排序?数组有6个对象我想对这些对象进行排序,这样我可以更好地在表中使用它们,而不是每次随机返回提示:这是一个同步性问题。基本上,你可以在一个事件中改变你的代码,在排序之前等待获取所有数据。而且,这也是一个多维数组,即使我在上面加上5秒的超时,获取所有数组仍然无法排序@hintDifferent数据结构的codtex ty来自不同的端点。实际上你想要的结果是什么,你想如何对数据进行排序?数组有6个对象我想对这些对象进行排序,这样我可以更好地在表中使用它们,而不是每次随机返回在这种情况下不会产生任何影响在这种情况下不会产生任何影响