【发布时间】:2021-10-24 10:23:13
【问题描述】:
问题: 我需要通过识别标题名称来合并列,并使用以下代码按需要工作。
代码效率非常低,因为我使用 eval 来完成这项工作,我相信它会导致不必要的多次传递,不建议这样做。有没有办法优化我的代码来合并列? 我的代码仅适用于一项水果,因为“CriteriaMatchArray”对于许多项目我需要再次将结果作为输入传递并运行它导致效率低下。
https://docs.google.com/spreadsheets/d/18FSwIDZ5H5nqrbwq-VIMoHouW6f0cSZ7sTIgN9RxBc0/edit?usp=sharing
这是图片:https://i.stack.imgur.com/A2d6d.png
因此最终结果只是如图所示的二维数组
下面有代码
<!DOCTYPE html>
<html>
<body>
<script>
var table = [
["Sl.no","fruits 1", "fruits 2", "fruits 3", "fruits 4", "fruits 5", "vegetables 1", "vegetables 2"],
["1","banana", "apple", "orange", "", "", "carrot", "cabbage"],
["2","watermelon", "apple", "orange", "", "", "beans", ""]
]
//document.write(JSON.stringify(table))
var str = [],
m = [];
var firstJoiningPosition = -1;
CriteriaMatchArray = ["fruits"] //this is the input (currently processes only 1 item in list) and user can change or add more
for (var i = 0; i < table[0].length; i++) {
if (table[0][i].indexOf(CriteriaMatchArray[0]) == -1) {
str.push("table[i][" + i + "]")
} else {
if (firstJoiningPosition == -1)
firstJoiningPosition = i
m.push("table[i][" + i + "]")
}
}
str[firstJoiningPosition] = m.join("+ '#' +")
evalstring = str.join(",")
document.write('<pre>Given table ' + JSON.stringify(table, null, 4) + '</pre>')
var result = []
for (var i = 0; i < table.length; i++) {
eval("result.push(" + "[" + evalstring + "]" + ")")
}
document.write('<pre>Result after joining ' + JSON.stringify(result, null, 4) + '</pre>')
</script>
</body>
</html>
【问题讨论】:
标签: javascript arrays multidimensional-array