我有一个这样的对象数组:
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);
// ...
}
}
}
});
但是这段代码似乎多余。无论如何,有没有对其进行优化,或者将其中的一些分离成一个辅助函数?谢谢!
答案 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);
// ...
}
}
})
});
如果有时间表,请对其进行迭代,否则,将试验包装在数组中并对其进行迭代。