我正在尝试按字母顺序对链接的名称进行排序,但是它表示 level2.sort不是函数,感谢您的帮助!
for (let i = 0, l = finalData.length; i < l; i++) {
const level1 = finalData[i];
console.log('This is level 1', level1);
for (let x = 0, y = finalData[i].links.length; x < y; x++) {
const level2 = finalData[i].links[x];
level2.sort((a, b) => a.name - b.name);
console.log('This is level 2', level2);
}
}
[0]的1级是{title:“ resources”,links:Array(3)}
[0]的2级是{name:“ google”,路径:“ www.google.com”}
[1]上的2级是{name:“ yahoo”,路径:“ www.yahoo.com”}
[2]的2级是{name:“ apple”,path:“ www.apple.com”}
[1]的1级是{title:“ TeacherEmails”,links:Array(2)}
位于[0]的2级是{name:“ JoneA”,路径:“ JoneA@yahoo.com”}
位于[1]的2级是{name:“ AndyK”,路径:“ AndyK@apple.com”}
以此类推
答案 0 :(得分:1)
您在这里太深了:
const level2 = finalData[i].links[x];
这使level2不能成为无法排序的数组。
删除索引访问器:
finalData[i].links;
您也不需要第二个for循环。
并使用MDN中的字符串排序:
// sort by name
items.sort(function(a, b) {
var nameA = a.name.toUpperCase(); // ignore upper and lowercase
var nameB = b.name.toUpperCase(); // ignore upper and lowercase
if (nameA < nameB) {
return -1;
}
if (nameA > nameB) {
return 1;
}
// names must be equal
return 0;
});
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
您的循环将如下所示:
for (let i = 0; i < finalData.length; i++) {
finalData[i].links.sort((a, b) => {
var nameA = a.name.toUpperCase(); // ignore upper and lowercase
var nameB = b.name.toUpperCase(); // ignore upper and lowercase
if (nameA < nameB) {
return -1;
}
if (nameA > nameB) {
return 1;
}
// names must be equal
return 0;
}
}
答案 1 :(得分:0)
由于level2
不是数组对象,而是类似数组的Arguments object,所以出现此错误。
如果您可以使用外部库,例如lodash,则可以使用orderBy
方法进行排序:
_.orderBy(level2, ['name'], ['asc']);