如果找到一个键,则循环遍历一个数组,跳过该键的索引,但最终想返回并添加该索引以跳过其他键
Loop through an array if it finds a key, skip the index for that key, but eventually want to go back and add that index skipping the other keys
所以这有点难以解释,但基本上是在尝试以更有效的方式执行以下代码...
products.forEach(function(item, index){
if(item.sale == false ) {
nonSaleItems += createEl(item);
} else {
saleItems += createEl(item);
}
});
items.innerHTML += nonSaleItems;
items.innerHTML += saleItems;
products 是一个对象数组,其中一个键是“sale”,“sale”是“false”或“true”。这背后的想法是首先 post 所有 none 销售项目,然后是销售项目 - 因此首先是 nonSaleItems 的 innerHTML,然后是 saleItems。
此代码完美运行,但我觉得必须有一种更有效/更简洁的方法来代替 nonSaleItems 和 saleItems 两个变量,然后是两个 innterHTML。
只是好奇是否有人对如何简化或改进它有更好的想法?
您已经对所有产品进行了一次循环,这是 a) 必要的,并且 b) 尽可能高效。
您能做的最好的事情就是让您的代码不那么冗长。在这种情况下,我使用三元来决定是使用 saleItems
还是 nonSaleItems
作为 += createEl(...)
:
的左值
products.forEach(function(item, index){
( item.sale ? saleItems : nonSaleItems ) += createEl(item);
});
items.innerHTML += nonSaleItems;
items.innerHTML += saleItems;
编辑:
上面的代码将不起作用,因为三元计算结果为右值,而不是左值。参见 Javascript Ternary Operator lvalue。
但是,您可以使用三元来评估一个 对象,它可以被取消引用(参见 ):
let saleItems = { html: '' }, nonSaleItems = { html: '' }
products.forEach(function(item, index){
( item.sale ? saleItems : nonSaleItems ).html += createEl(item);
});
items.innerHTML += nonSaleItems.html;
items.innerHTML += saleItems.html;
或者,只有一个对象,但使用三元来确定密钥:
let html = { sale: '', nonSale: '' };
products.forEach(function(item, index){
html[(item.sale ? 'sale' : 'nonSale')] += createEl(item);
});
items.innerHTML += html.nonSale;
items.innerHTML += html.sale;
所以这有点难以解释,但基本上是在尝试以更有效的方式执行以下代码...
products.forEach(function(item, index){
if(item.sale == false ) {
nonSaleItems += createEl(item);
} else {
saleItems += createEl(item);
}
});
items.innerHTML += nonSaleItems;
items.innerHTML += saleItems;
products 是一个对象数组,其中一个键是“sale”,“sale”是“false”或“true”。这背后的想法是首先 post 所有 none 销售项目,然后是销售项目 - 因此首先是 nonSaleItems 的 innerHTML,然后是 saleItems。
此代码完美运行,但我觉得必须有一种更有效/更简洁的方法来代替 nonSaleItems 和 saleItems 两个变量,然后是两个 innterHTML。
只是好奇是否有人对如何简化或改进它有更好的想法?
您已经对所有产品进行了一次循环,这是 a) 必要的,并且 b) 尽可能高效。
您能做的最好的事情就是让您的代码不那么冗长。在这种情况下,我使用三元来决定是使用 saleItems
还是 nonSaleItems
作为 += createEl(...)
:
products.forEach(function(item, index){
( item.sale ? saleItems : nonSaleItems ) += createEl(item);
});
items.innerHTML += nonSaleItems;
items.innerHTML += saleItems;
编辑:
上面的代码将不起作用,因为三元计算结果为右值,而不是左值。参见 Javascript Ternary Operator lvalue。
但是,您可以使用三元来评估一个 对象,它可以被取消引用(参见 ):
let saleItems = { html: '' }, nonSaleItems = { html: '' }
products.forEach(function(item, index){
( item.sale ? saleItems : nonSaleItems ).html += createEl(item);
});
items.innerHTML += nonSaleItems.html;
items.innerHTML += saleItems.html;
或者,只有一个对象,但使用三元来确定密钥:
let html = { sale: '', nonSale: '' };
products.forEach(function(item, index){
html[(item.sale ? 'sale' : 'nonSale')] += createEl(item);
});
items.innerHTML += html.nonSale;
items.innerHTML += html.sale;