繁体   English   中英

迭代数组中的json对象

[英]Iterating over json objects in array

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

mainarray:Object
  >key1: Array[30]
  >key2: Array[20]

我想对Array [30]和Array [20]进行排序。 我想这样做:

mainarray.forEach((arrayinner)
{
  //sort
});

但我收到错误: 因为无法读取未定义的属性。

我怎么迭代? 并且键名是动态的,我不能硬编码并开始迭代/

您需要函数关键字来获得有效的回调声明。

mainarray.forEach(function (arrayinner)
//                ^^^^^^^^
{
  //sort
});

但问题更深入:

您需要获取密钥并迭代它们并采用适当的值来应用排序

Object.keys(mainarray).forEach(function (key) {
    mainarray[key].sort();
});

您可以使用$.each

$.each(mainarray, function(key,val){
  val.sort((a,b) => {return a > b ? 1 : a < b ? -1 : 0});
});

因为val是一个数组,也就是一个对象。 它的引用将在callBack函数内共享。 因此影响callBack中的数组会影响原始数组。

DEMO

您可以获取要迭代的键数组

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

如果mainarray的所有键可能没有Array值,那么您可以在排序之前进行检查

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

你可以通过循环对象本身的属性并对它们包含的数组进行排序来实现这一点,如下所示:

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

工作实例

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM