【发布时间】:2019-08-09 05:48:47
【问题描述】:
如何使用forEach() 方法编写这些(工作)函数:
function loadAudioMeterHistory(cell) {
var peaks = new Array(4);
for (var i = 0; i < peaks.length; i++) {
var peak,
age;
peak = cell.getAttribute("data-peak-" + i);
age = cell.getAttribute("data-age-" + i);
peaks[i] = new Peak(peak, age);
}
return peaks;
}
function setAudioMeterHistory(cell, peaks) {
for (var i = 0; i < peaks.length; i++) {
cell.setAttribute("data-peak-" + i, peaks[i].peak);
cell.setAttribute("data-age-" + i, peaks[i].age);
}
}
我的尝试如下:
function loadAudioMeterHistory(cell) {
"use strict";
var peaks = new Array(4);
peaks.forEach(function(item, index) {
var p = cell.getAttribute("data-peak-" + index);
var a = cell.getAttribute("data-age-" + index);
item = new Peak(p, a);
});
return peaks;
}
function setAudioMeterHistory(cell, peaks) {
"use strict";
peaks.forEach(function(item, index) {
cell.setAttribute("data-peak-" + index, item.peak);
cell.setAttribute("data-age-" + index, item.age);
});
}
其行为不同,因为 peaks 永远不会正确创建。精明的 javascripter 无疑会认识到我正在尝试 jslint.com 我的代码。
Peak() 方法(为简洁起见)很简单:
function Peak(peak, age) {
this.peak = peak;
this.age = age;
}
什么给了?
【问题讨论】:
-
map 更适合
loadAudioMeterHistory -
peaks.forEach变为peaks.map和item = new Peak(p, a)变为return new Peak(p, a) -
forEach/map 在未设置值时不会遍历索引。一个简单的 console.log() 会显示代码没有被命中。
-
所以...
var peaks = new Array(4).fill(null)
标签: javascript jslint