所以我有这个forEach函数,它在提交一些数据后替换表单元格中的文本。我将基于表行替换三个不同的表单元格,并将它们分离为三个不同语句。
像这样:
replaceData.forEach((item, i) => {
$(`.tableData tbody tr:eq(${item.index})`)
.children(["td:eq(6)"])
.text(values[i] === null ? "-" : values[i]);
$(`.tableData tbody tr:eq(${item.index})`)
.children("td:eq(7)")
.text(reason[i]);
$(`.tableData tbody tr:eq(${item.index})`)
.children("td:eq(8)")
.text(notes[i] === null ? "-" : notes[i]);
});
我试着把这三种说法像这样结合起来,但没有奏效。如果可能的话,有人知道我如何将这三种说法结合起来吗?还是实现这一点的唯一方法是将它们作为自己的声明?
$(`.tableData tbody tr:eq(${item.index})`)
.children(["td:eq(6)", "td:eq(7)", "td:eq(8)"])
.text([
values[i] === null ? "-" : values[i],
reason[i],
notes[i] === null ? "-" : notes[i]
]);
将它们分开处理看起来是正确的做法,将所有内容放在一行中不会带来任何好处,而且可读性也会降低,尤其是在使用大量三元运算时。
但是,您可以通过创建对该行的引用来清理代码,而不是每次都重复它。
例如。
replaceData.forEach((item, i) => {
const row = $(`.tableData tbody tr:eq(${item.index})`);
row.children('td:eq(6)').text(values[i] === null ? '-' : values[i])
row.children('td:eq(7)').text(reason[i]);
row.children('td:eq(8)').text(notes[i] === null ? '-' : notes[i])
})
如果你有很多列,你甚至可以创建一个简单的内联函数,让事情更容易理解。
例如。
replaceData.forEach((item, i) => {
const row = $(`.tableData tbody tr:eq(${item.index})`);
const R = c => row.children(`td:eq(${c})`);
R(6).text(values[i] === null ? '-' : values[i]);
R(7).text(reason[i]);
R(8).text(notes[i] === null ? '-' : notes[i]);
})