Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.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
Javascript 迭代数组中的json对象_Javascript_Jquery_Arrays_Json - Fatal编程技术网

Javascript 迭代数组中的json对象

Javascript 迭代数组中的json对象,javascript,jquery,arrays,json,Javascript,Jquery,Arrays,Json,我有一个名为mainarray的数组,它有多个json对象 mainarray:Object >key1: Array[30] >key2: Array[20] 我想对数组[30]和数组[20]进行排序。 我试着这样做: mainarray.forEach((arrayinner) { //sort }); for (var key in mainarray) { if (mainarray[key] === Array) mainarray[

我有一个名为mainarray的数组,它有多个json对象

mainarray:Object
  >key1: Array[30]
  >key2: Array[20]
我想对数组[30]和数组[20]进行排序。 我试着这样做:

mainarray.forEach((arrayinner)
{
  //sort
});
for (var key in mainarray) {
    if (mainarray[key] === Array)
        mainarray[key].sort();
}
但我得到错误:因为无法读取未定义的属性。


如何迭代?而且键名也是动态的,我不能硬编码并开始迭代

您可以通过循环对象本身的属性并对它们包含的数组进行排序来实现这一点,类似这样:

mainarray.forEach((arrayinner)
{
  //sort
});
for (var key in mainarray) {
    if (mainarray[key] === Array)
        mainarray[key].sort();
}


请注意,默认情况下,
sort()
仅使用基本的字母数字排序逻辑。如果您需要更复杂的内容,您需要自己实现。

您需要使用function关键字进行有效的回调声明

mainarray.forEach(function (arrayinner)
//                ^^^^^^^^
{
  //sort
});
但问题更为严重:

您需要获取键并对其进行迭代,然后获取属性值以应用排序

Object.keys(mainarray).forEach(function (key) {
    mainarray[key].sort();
});
你可以使用

$。每个(主数组、函数(键、值){
val.sort((a,b)=>{返回a>b?1:a
因为
val
是数组,也就是对象。它的引用将在回调函数内部共享。因此,影响回调中的数组将影响原始数组


您可以获得要迭代的密钥数组

Object.keys ( mainarray ).forEach( function( arrayinner ){
  arrayinner.sort();
});
如果
mainarray
中的所有键可能没有
Array
值,则可以在排序之前进行检查

Object.keys ( mainarray ).forEach( function( arrayinner ){
  Array.isArray( arrayinner ) || arrayinner.sort();
});

请仅将单词数组用作数组的变量名,而不是对象的变量名。你需要在传递的参数后面放一个箭头,比如
mainarray.forEach((arrayinner)=>{//sort})
事实上,对于一个参数,你甚至不需要括号,就像
mainarray.forEach(arrayinner=>{//sort})
一样,然后内联箭头背后的想法是缩短代码。因此,使用长变量名没有意义,您可以简化代码,更像
mainarray.forEach(a=>{//sort})