遍历此对象数组的最佳方法是什么?

时间:2020-04-16 20:54:14

标签: javascript

我有一个这样的对象数组:

const opts_timeline = [
      {
        type: {...},
        stimulus: ''
      },
      {
        type: {...},
        stimulus: ''
      },
      {
        timeline: [{type: {...}, stimulus: ''}],
        timeline_variable: [{...}, {...}]
      },
      {
        type: {...},
        stimulus: ''
      },
    ]

其中的type对象是这样的:

type: {
  info: {name: '', preloads: ''},
  stimulus: ''
}

我想遍历此数组并在type对象中检索一些属性,我尝试了forEach方法:

opts_timeline.forEach(multiple_trials => {
      if (!multiple_trials.hasOwnProperty('type')) {
        multiple_trials.timeline.forEach(trial => {
          var preloads = trial.type.info.preloads;
          if (typeof preloads !== 'undefined') {
            for (var i = 0; i < preloads.length; i++) {
              var type = trial.type.info.name;
              var param = preloads[i].parameter;
              var media = preloads[i].media_type;
              var func = preloads[i].conditional_function;
              var trials = timeline.trialsOfType(type);
              // ...
            }
          }
        })
      } else {
        var preloads = multiple_trials.type.info.preloads;
        if (typeof preloads !== 'undefined') {
          for (var i = 0; i < preloads.length; i++) {
            var type = multiple_trials.type.info.name;
            var param = preloads[i].parameter;
            var media = preloads[i].media_type;
            var func = preloads[i].conditional_function;
            var trials = timeline.trialsOfType(type);
            // ...
          }
        }
      }
    });

但是这段代码似乎多余。无论如何,有没有对其进行优化,或者将其中的一些分离成一个辅助函数?谢谢!

1 个答案:

答案 0 :(得分:1)

似乎可以简化以下操作:

  opts_timeline.forEach(multiple_trials => {
    (multiple_trials.timeline || [multiple_trials]).forEach(trial => {
      var preloads = trial.type.info.preloads;
      if (typeof preloads !== 'undefined') {
        for (var i = 0; i < preloads.length; i++) {
          var type = trial.type.info.name;
          var param = preloads[i].parameter;
          var media = preloads[i].media_type;
          var func = preloads[i].conditional_function;
          var trials = timeline.trialsOfType(type);
          // ...
        }
      }
    })
  });

如果有时间表,请对其进行迭代,否则,将试验包装在数组中并对其进行迭代。

相关问题