对数组中的json对象进行迭代

Iterating over json objects in array

本文关键字:迭代 对象 json 数组      更新时间:2023-09-26

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

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

我想对数组[30]和数组[20]进行排序。我正试着这样做:

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

但我得到了一个错误:因为无法读取未定义的属性

我如何迭代?而且密钥名称是动态的,我不能硬编码它并开始迭代/

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

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

但问题更深层:

您需要获取密钥并对其进行迭代,然后获取适当的值来应用排序

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

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

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

如果mainarray内的所有密钥可能没有Array值,则可以在排序之前进行检查

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

您可以使用$.each

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

因为CCD_ 4是一个阵列。它的引用将在callBack函数内部共享。因此,在callBack中影响该数组将影响原始数组。

演示

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

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

工作示例

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