繁体   English   中英

遍历JS对象并检查属性是否为null

[英]Loop through JS objects and check if properties are null

试图找到一种简单的方法来遍历对象结构,以构建queryString传递给我的API端点。

方案-是如果id为null使用codessku还是codes and sku为null然后使用id ,而不是使用多个if()来执行此条件,是否有更好的方法来实现? 如果全部存在,则应默认使用sku

 var loopThrough = { "OrderLine": [{ "Product": { "Id": null, "Codes": ["1112"], "Sku": "CS1112" }, "TotalValue": 0, "Quantity": 1 }, { "Product": { "Id": null, "Codes": ["1113"], "Sku": "CS1113" }, "TotalValue": 0, "Quantity": 1 }], "OriginatingSite": { "Id": 1 }, "TotalValue": 0 }; var allIds = '?'; var first = true; for (var i = 0; i < loopThrough.OrderLine.length; i++) { var orderLines = loopThrough.OrderLine[i]; var prodId = orderLines.Product.Id; var prodCodes = orderLines.Product.Codes; var prodSku = orderLines.Product.Sku; if (first) { first = false; if (prodId === null) { allIds = allIds + "&code=" + orderLines.Product.Codes[0]; } else { allIds = allIds + "&id=" + orderLines.Product.Id; } } else { if (prodId !== null) { allIds = allIds + "&id=" + orderLines.Product.Id } else { allIds = allIds + "&sku=" + orderLines.Product.Sku; } } console.log(allIds) } 

没有太多的变化,更复杂的事情将使整个观点恶化。 但是,如果条件优先于自己,则条件可能会更加“宽松”。

 var loopThrough = { "OrderLine": [{ "Product": { "Id": null, "Codes": ["1112"], "Sku": "CS1112" }, "TotalValue": 0, "Quantity": 1 }, { "Product": { "Id": null, "Codes": ["1113"], "Sku": "CS1113" }, "TotalValue": 0, "Quantity": 1 }], "OriginatingSite": { "Id": 1 }, "TotalValue": 0 }; var allIdsArr = []; var first = true; for (var i = 0; i < loopThrough.OrderLine.length; i++) { var orderLines = loopThrough.OrderLine[i]; var prodId = orderLines.Product.Id; var prodCodes = orderLines.Product.Codes; var prodSku = orderLines.Product.Sku; allIdsArr.push( prodId !== null ? 'id=' + prodId : prodCodes !== null ? 'code=' + prodCodes : 'sku=' + prodSku ) } console.log('?' + allIdsArr.join('&')) 

  • 不能以两种不同的方式有效地进行相同的比较,这会使代码很难阅读。
  • 除非必要,否则不要使用for循环,请使用map
  • 不要声明您不打算使用的变量
  • 当代码必须沿着两条不同的路径前进时,请最小化不同路径的长度。

简短的版本可能是:

 const loopThrough = { "OrderLine": [{ "Product": { "Id": null, "Codes": ["1112"], "Sku": "CS1112" }, "TotalValue": 0, "Quantity": 1 }, { "Product": { "Id": null, "Codes": ["1113"], "Sku": "CS1113" }, "TotalValue": 0, "Quantity": 1 }], "OriginatingSite": { "Id": 1 }, "TotalValue": 0 }; const url = "?" + loopThrough.OrderLine .map((order, index) => { const product = order.Product; return product.Id? `id=${product.Id}`: index === 0? `sku=${product.Sku}`: `code=${product.Codes[0]}`; }) .join("&"); console.log(url); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM