我有两组连接的数组,使它成为一个二维...我喜欢做的是删除任何在加入后具有0值的行然后排序desending并显示在html表中
var desc = new Array();
var desc = ["Water","Heating","Electric","Gas"];
var price = new Array();
var price=["824","325","0","245"];
var sortdesc;
var sortdesc = new Array (2);
for (i = 0; i < desc . length; ++ i)
{
for (var i=0; i < price.length; i++)
{
sortdesc[i] = Array(desc[i], price[i]);
if (price[i] == 0 )
{
sortdesc.splice(i,1);
}
}
}
sortdesc.sort(function(a,b){ return b[1] - a[1]; });
function sortedtable (array)
{
document . write("<table border>");
var row;
for (row = 0; row < array . length; ++ row)
{
document . write(" <tr>");
var col;
for (col = 0; col < array [row].length; ++ col)
document . write(" <td>" + array [row] [col] + "</td>");
document . write(" </tr>");
}
document.write("</table>");
}
sortedtable(sortdesc);
问题是我认为.splice()会重组数组我做错了什么? 并且有更好的方法来做到这一点
我看到了其他问题,但他们都说使用.splice()而不是delete.array [element]但是.splice对我不起作用
请原谅我的代码初学者。
答案 0 :(得分:0)
splice
已成功从数组中删除该项,但在下一个循环中,您再次分配给sortdesc[i]
,以便删除的索引将保留undefined
- 您创建了一个稀疏数组
除此之外,嵌套循环使用相同的count变量存在很大问题。它至少在price.length >= desc.length
之后不会以无限循环结束,但构造非常值得怀疑。
要解决您的问题,只需使用sortdesc
将新元素(并且只有在您确实要添加它们时)添加到push()
数组的末尾:
// no need to double initialize
var desc = ["Water","Heating","Electric","Gas"];
var price = ["824","325","0","245"];
// the Array constructor does not take dimensions. You just want an empty array here
var sortdesc = [];
// … to fill it with other arrays:
for (var i = 0, l = Math.min(desc.length, price.length); i < l; i++) {
if (price[i] != 0) {
sortdesc.push( [desc[i], price[i]] );
}
}
答案 1 :(得分:0)
简短回答 - 您不需要从数组中拼接/删除,只需事先进行检查,如果价格为零,则不要添加项目。
另一个快速评论 - 从您的数据来看,看起来desc和price数组的长度都相同。在这种情况下,您只需使用一个for循环,无需迭代两者。
工作代码:
var desc = ["Water","Heating","Electric","Gas"];
var price = ["824","325","0","245"];
var sortdesc = [];
// Presuming both arrays with be the same length
for (i = 0; i < desc.length; ++ i) {
if(price[i] !== "0") {
sortdesc.push([desc[i], price[i]]);
}
}
sortdesc.sort(function(a,b){ return b[1] - a[1]; });
function sortedtable (array)
{
document . write("<table border>");
for (row = 0; row < array.length; ++ row)
{
document . write(" <tr>");
for (col = 0; col < array[row].length; ++ col)
document . write(" <td>" + array [row] [col] + "</td>");
document . write(" </tr>");
}
document.write("</table>");
}
sortedtable(sortdesc);