[按属性值排列对象的数组]
我想比较支持和排序的数量,但是在理解如何从我的api到达对象“ ups”方面遇到问题。 我创建了compare函数,我想调用它。我可能将其称为错误的对象。
function fetchData(url) {
return fetch(url).then((resp) => resp.json());
}
function createTableRow(data) {
const tableRow = document.createElement('tr');
const {
title,
ups,
downs,
score,
num_comments,
created
} = data;
console.log(ups);
tableRow.appendChild(createElement('td', title))
tableRow.appendChild(createElement('td', ups))
tableRow.appendChild(createElement('td', downs))
tableRow.appendChild(createElement('td', score))
tableRow.appendChild(createElement('td', num_comments))
tableRow.appendChild(createElement('td', created))
return tableRow;
}
function createElement(tag_name, text) {
const el = document.createElement(tag_name);
const content = document.createTextNode(text);
el.appendChild(content);
return el;
}
**function compare(a,b) {
if(a.ups<b.ups) {
return -1;
}
if(a.ups>b.ups){
return 1;
}
return 0;
}**
const butt = document.getElementById('button');
const swTable = document.getElementById('sw_table').getElementsByTagName('tbody')[0];
fetchData('https://www.reddit.com/r/funny.json')
.then(data => {
data.data.children.forEach(result => {
const table = createTableRow(result.data);
swTable.appendChild(table);
// butt.onclick(sortData(ups));
**data.data.children.ups.sort(compare);**
});
});
错误: 未捕获(承诺)TypeError:无法读取未定义的属性“ sort”
答案 0 :(得分:1)
这是您应该使用的:
fetchData('https://www.reddit.com/r/funny.json')
.then(data => {
const sortedResults = data.data.children.sort((a,b) => b.data.ups - a.data.ups)
sortedResults.forEach(result => {
const row = createTableRow(result.data);
swTable.appendChild(row);
})
});
});
a.data.ups - b.data.ups
如果a
的涨幅大于b
,则返回负数;如果b
的涨幅大于a
,则返回正数;并且如果他们有相同的起跳次数,则为0 答案 1 :(得分:0)
如果认为API以以下格式返回数据:
{
"data": {
children: [
{
title,
ups,
downs,
score,
num_comments,
created
}
]
}
}
如下修改 then
函数将解决您的问题。
.then(data => {
data.data.children.sort(compare)
.forEach(result => {
const table = createTableRow(result);
swTable.appendChild(table);
})
});
答案 2 :(得分:0)
更改下面的行,
**data.data.children.ups.sort(compare);**
到
data.data.children.sort((a,b)=>a.ups-b.ups); // ascending
data.data.children.sort((a,b)=>b.ups-a.ups); // descending