我有一个名为mainarray的数组,它有多个json对象。
mainarray:Object
>key1: Array[30]
>key2: Array[20]
我想对Array [30]和Array [20]进行排序。 我想这样做:
mainarray.forEach((arrayinner)
{
//sort
});
但我收到错误:因为无法读取未定义的属性。
我该怎么迭代?并且键名是动态的,我不能硬编码并开始迭代/
答案 0 :(得分:3)
您需要有效的回调声明的函数关键字。
mainarray.forEach(function (arrayinner)
// ^^^^^^^^
{
//sort
});
但问题更严重:
您需要获取密钥并对其进行迭代并采用适当的值来应用排序
Object.keys(mainarray).forEach(function (key) {
mainarray[key].sort();
});
答案 1 :(得分:2)
您可以使用$.each
$.each(mainarray, function(key,val){
val.sort((a,b) => {return a > b ? 1 : a < b ? -1 : 0});
});
因为val
是一个数组,也就是一个对象。它的引用将在callBack函数内共享。因此影响callBack中的数组会影响原始数组。
答案 2 :(得分:2)
您可以获取要迭代的键数组
Object.keys ( mainarray ).forEach( function( arrayinner ){
arrayinner.sort();
});
如果mainarray
中的所有键可能没有Array
值,那么您可以在排序前检查
Object.keys ( mainarray ).forEach( function( arrayinner ){
Array.isArray( arrayinner ) || arrayinner.sort();
});
答案 3 :(得分:1)
你可以通过循环对象本身的属性并对它们包含的数组进行排序来实现这一点,如下所示:
for (var key in mainarray) {
if (mainarray[key] === Array)
mainarray[key].sort();
}
请注意,默认情况下sort()
仅使用基本的字母数字排序逻辑。如果你需要更复杂的东西,你需要自己实现它。