循环通过动态对象:signalData[signals].data不是函数



你好,我正在尝试循环多个对象。

在我的解决方案中,我尝试用for(... in ...)循环归档:

var signalData = {
signal1: {
name: "signal1",
data: [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 1, 2, 3, 5, 4, 1, 4, 2, 9, 7, 5, 7, 4, 6],
},
signal2: {
name: "signal2",
data: [6, 4, 8, 5, 4, 8, 4, 3, 5, 4, 5, 8, 7, 2, 9, 5, 4, 1, 2, 6, 0, 5, 7, 1],
},
signal3: {
name: "signal3",
data: [9, 5, 12, 3, 8, 4, 8, 6, 3, 4, 7, 8, 5, 2, 1, 8, 6, 8, 5, 8, 4, 8, 5, 1],
},
}
var output = [];
for (var signals in signalData) {
var dat = Object.keys(signalData[signals].data);
//console.log(dat);
dat.forEach((signal) => {
if (signal >= 3 && signal <= 7) {
output.push(signalData[signals].data(signal));
}
});
}
console.log(output)

console.log(dat);给了我正确的数据,但在forEach中,我在控制台中收到了这个错误:signalData[signals].data is not a function我搞不清出了什么问题。也许有人已经解决了类似的问题,可以帮助我。谢谢。

在您的示例中,signal是对象signalData[signals].data的键。你用这条线把它称为一个函数

output.push(signalData[signals].data(signal));

相反,请尝试此操作,以便访问对象的属性。

output.push(signalData[signals].data[signal]);

您可以简单地使用基于索引的for循环来遍历数组,而不是使用Object.keys

var signalData = {
signal1: {
name: "signal1",
data: [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 1, 2, 3, 5, 4, 1, 4, 2, 9, 7, 5, 7, 4, 6],
},
signal2: {
name: "signal2",
data: [6, 4, 8, 5, 4, 8, 4, 3, 5, 4, 5, 8, 7, 2, 9, 5, 4, 1, 2, 6, 0, 5, 7, 1],
},
signal3: {
name: "signal3",
data: [9, 5, 12, 3, 8, 4, 8, 6, 3, 4, 7, 8, 5, 2, 1, 8, 6, 8, 5, 8, 4, 8, 5, 1],
},
}
var output = [];
for (var signals in signalData) {
var dat = signalData[signals].data;
for(let i = 3; i < Math.min(dat.length, 8); i++){
output.push(dat[i]);
}
}
console.log(output)

最新更新