Javascript 合并多个(几乎)重复的每条语句

Javascript 合并多个(几乎)重复的每条语句,javascript,jquery,Javascript,Jquery,我有以下几组几乎完全相同的语句。我需要再添加20个类似的模式。我试图找出如何将这些小变量更新为一条语句(而不是将同一个稍有不同的语句更新20次) 从你的问题来看,目标似乎是提取一个可以多次执行并产生类似结果的函数。通过定义对参数化变量执行相同迭代、查找和追加操作的函数,可以多次使用此函数 这应该是你想要的: function updateDom(arrayOfValues, parentElementId, childElementId) { $.each(arrayOfValues,

我有以下几组几乎完全相同的
语句。我需要再添加20个类似的模式。我试图找出如何将这些小变量更新为一条语句(而不是将同一个稍有不同的语句更新20次)


从你的问题来看,目标似乎是提取一个可以多次执行并产生类似结果的函数。通过定义对参数化变量执行相同迭代、查找和追加操作的函数,可以多次使用此函数

这应该是你想要的:

function updateDom(arrayOfValues, parentElementId, childElementId) {
    $.each(arrayOfValues, function(index, val) {
       $('#' + parentElementId).find('#' + childElementId)
       .append($('<td class="tableCells">')
       .append(val.value + '</td>'))});
}
函数更新域(ArrayOfValue、parentElementId、childElementId){
$.each(数组值、函数(索引、值){
$(“#”+parentElementId)。查找(“#”+childElementId)
.append($('')
.append(val.value+“”))};
}

您可以提取函数,以便:


事实上,有很多方法可以重构这段代码

第一步,将您的通用逻辑提取到一个可以重用的函数中,而不是反复重复

function addTableCells ( elements, targetId ) {
    $.each(elements, function(index, val) {
        $("#matrix_datatable").find(targetId)
            .append($('<td class="tableCells">'+ val.value +'</td>');
    });
}
函数addTableCells(元素,targetId){
$.each(元素、函数(索引、val){
$(“#矩阵_数据表”).find(targetId)
.追加($(''+val.value+'');
});
}

我不确定这是否是您打算做的,但包装您的产品怎么样 每个都在一个foreach中:)

var数据点=['name','description','subtitle'];
dataPoints.forEach((字段)=>{
var tableId=;
$.each(mainData[field])。源值,函数(index,val){
$(“#矩阵_数据表”).find(“#”+tableId)
.append($('')
.append(val.value+'')
)
}); 
});

您可以这样做

var lst = [mainData.name.source_values, mainData.description.source_values, mainData.subtitle.source_values];
var ids = ["mNames", "mDescription", "mSubtitle"];

for (i = 0; i < lst.length; i++) {
    $.each(lst[i], function(index, val) {
        $("#matrix_datatable").find( "#" + ids[i] )
            .append($("<td class='tableCells'>")
            .append(val.value + "</td>")
    });
}
var lst=[mainData.name.source_值,mainData.description.source_值,mainData.subtitle.source_值];
变量ID=[“mNames”、“mddescription”、“mSubtitle”];
对于(i=0;i
闻起来像是一个提取方法的开始!@Taplar我不知道那是什么,也不知道如何使用它。method==一个函数。制作一个具有你逻辑的公共部分的函数,并将它们之间不同的变量传递给它使用。你有没有可能给我一个小小的开始?大多数答案都过于关注那个应用程序了将“someting”结尾到dom元素无效。在创建dom元素时,添加未关闭的“”将自动关闭它。您不是在添加字符串。您可以执行类似操作如何以及在何处存储
arrayOfValues
childElementId
,以便此函数可以访问?这些是数组的名称吗?@jonmrich作为全局变量或局部变量,从其他一些Routinet获取,以确保安全:
append($('',{text:val.value}))
可能该值包含他想要的html。Idk他的整个用例。然后更改HTMLH的文本这与此有什么不同?如果他的值确实包含html并且格式不正确,那么这是他必须解决的其他问题。你永远不知道可以包含什么值我觉得在这方面帮助你有点不好:重构是学习的最佳方式但是还有很多时候你需要重构代码,所以请记住并好好享受:)这看起来是最好的方法,我会回应之前关于以这种方式追加
,而不是将其减少为append函数中的append行,比如:
.append($('',{class:“tableCells”,text:val.value});
function append(id) {
    return function(index, val) {
        $('#matrix_datatable').find(id)
             // if your value doesn't contain HTML, opt for this
            .append($('<td>', { class: 'tableCells', text: val.value })
            // if it contains html, replace `text` with `html`
        );
    };
}

$.each(mainData.name.source_values, append('#mName'));
$.each(mainData.description.source_values, append('#mDescription'));
$.each(mainData.subtitle.source_values, append('#mSubtitle'));
for (let i = 0; i < 3; i++) {
     $.each(mainData[$dataPoints[i]].source_values, append('#'+$tableIds[i]))
}
function addTableCells ( elements, targetId ) {
    $.each(elements, function(index, val) {
        $("#matrix_datatable").find(targetId)
            .append($('<td class="tableCells">'+ val.value +'</td>');
    });
}
var dataPoints = ['name','description','subtitle'];
dataPoints.forEach( (field) => {
   var tableId = <generate table id from field string, add letter m and camelcase the field name>;
   $.each(mainData[field].source_values, function(index, val) {
     $("#matrix_datatable").find('#' + tableId)
      .append($('<td class="tableCells">')
      .append(val.value + '</td>')
     )
   }); 
});
var lst = [mainData.name.source_values, mainData.description.source_values, mainData.subtitle.source_values];
var ids = ["mNames", "mDescription", "mSubtitle"];

for (i = 0; i < lst.length; i++) {
    $.each(lst[i], function(index, val) {
        $("#matrix_datatable").find( "#" + ids[i] )
            .append($("<td class='tableCells'>")
            .append(val.value + "</td>")
    });
}