javascript - 我可以用数组或循环来收缩这段代码吗?

标签 javascript

请原谅,我希望这个问题不是太明显,我是一个 javascript 菜鸟。

我有 javascript 代码,它从 xml 工作表中获取数字并将它们显示在 html 页面上的 td 元素中。它有效,但我认为它可以压缩成一个数组或一个循环以提高效率。

有没有更好的方法来编写这段代码?

window.onload=function displayPrices()
{
twentyFourK=(x[i].getElementsByTagName("twentyFourK")[0].childNodes[0].nodeValue);
document.getElementById("twentyFourK").innerHTML=toCurrency(twentyFourK);

oneOzGold=(x[i].getElementsByTagName("oneOzGold")[0].childNodes[0].nodeValue);
document.getElementById("oneOzGold").innerHTML=toCurrency(oneOzGold);

fiveOzGold=(x[i].getElementsByTagName("fiveOzGold")[0].childNodes[0].nodeValue);
document.getElementById("fiveOzGold").innerHTML=toCurrency(fiveOzGold);

tenOzGold=(x[i].getElementsByTagName("tenOzGold")[0].childNodes[0].nodeValue);
document.getElementById("tenOzGold").innerHTML=toCurrency(tenOzGold);

oneKiloGold=(x[i].getElementsByTagName("oneKiloGold")[0].childNodes[0].nodeValue);
document.getElementById("oneKiloGold").innerHTML=toCurrency(oneKiloGold);

//etc.
}

最佳答案

是的,一个函数可以让你的事情变得更容易:

window.onload = function() {
    function loadCurrency(name) {
        document.getElementById(name).innerHTML = toCurrency(x[i].getElementsByTagName(name)[0].firstChild.nodeValue);
    }

    loadCurrency('twentyFourK');
    loadCurrency('oneOzGold');
    loadCurrency('fiveOzGold');
    loadCurrency('tenOzGold');
    loadCurrency('oneKiloGold');
};

此外,如果您有很多项目要加载:

window.onload = function() {
    function loadCurrency(name) {
        document.getElementById(name).innerHTML = toCurrency(x[i].getElementsByTagName(name)[0].firstChild.nodeValue);
    }

    var items = ['twentyFourK', 'oneOzGold', 'fiveOzGold', 'tenOzGold', 'oneKiloGold'];
    items.forEach(loadCurrency);
};

这需要 Array.forEach,它仅在 ECMAScript 5 中可用,所以这里有一个后备方案:

Array.prototype.forEach = function(action, thisArg) {
    for(var i = 0, l = this.length; i < l; i++) {
        if(i in this) {
            action.call(thisArg, this[i], i, this);
        }
    }
};

关于javascript - 我可以用数组或循环来收缩这段代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8774542/

相关文章:

javascript - 如何将这种无法识别的 CSS 特性转换为 javascript?

javascript - 即使在 vis.js 示例中,字体超棒的图标也呈现为正方形

javascript - 删除 Angular View 属性中的空间

javascript - 需要幻灯片 div 在更改幻灯片时将元素向下推

javascript - 无法将 React 元素绑定(bind)到事件监听器

javascript - 使用phonegap启动默认PDF应用程序

javascript - 分组条形图和折线图

javascript - 将组件的状态传递给 mapDispatchToProps React/Redux

javascript - 图表js : hide some labels in the legend

javascript - 为什么链式 filter() 调用会重新触发创建它的函数?