【问题标题】:How to generate uniques after subtracting arrays' elements based on conditions using JS?如何使用 JS 根据条件减去数组的元素后生成唯一值?
【发布时间】:2022-12-04 18:31:43
【问题描述】:

如何检查 array1 中的项目是否存在于 array2 中,如果存在,则从 col5 中减去 col4 以输出待定数量。如果不是,则来自array1 的商品数量是待定数量。

let array1 = 
[
 [1, "Item A", "Food", 10, 0],
 [2, "Item B", "Food", 5, 0],
 [3, "Item C", "Food", 30, 0]
]
let array2 = 
[
 [1, "Item A", "Food", 5, 3],
 [3, "Item C", "Food", 10, 5]
]

预期结果

let res= 
[
 [1, "Item A", "Food", 10, 7],
 [2, "Item B", "Food", 5, 0],
 [3, "Item C", "Food", 30, 25]
]

我使用 for 循环启动它,但我想知道使用 map() 或 reduce() 会是什么样子?

let array1 = [
  [1, "Item A", "Food", 10, 0],
  [2, "Item B", "Food", 5, 0],
  [3, "Item C", "Food", 30, 0]
]

let array2 = [
  [1, "Item A", "Food", 5, 3],
  [3, "Item C", "Food", 10, 5]
]

let result = [];
for (let a = 0; a < array1.length; a++) {
  let item = [];
  for (let r = 0; r < array2.length; r++) {
    if (array1[a][0] == array2[r][0] && array1[a][1] == array2[r][1]) {
      let pendingQty = array1[a][3] - array2[r][4];
      if (pendingQty > 0) {
        item = [array1[a][0], array2[r][1], array2[r][2], array2[r][3], pendingQty];
      } else {
        item = array1[a];
      }
    }
    if (item.length === 0) {
      item = array1[a];
    }
  }
  result.push(item.slice());
}
console.log(result)

【问题讨论】:

  • 为什么您的预期结果中的第二行不是[2, "Item B", "Food", 5, 5]?
  • 省时提示:Markdown中实现inline formatting,只需要一个反引号,不需要三个。只有块需要三个。

标签: javascript google-apps-script


【解决方案1】:

let a1 = [ [1, "Item A", "Food", 10, 0], [2, "Item B", "Food", 5, 0], [3, "Item C", "Food", 30, 0]];
let a2 = [ [1, "Item A", "Food", 5, 3], [3, "Item C", "Food", 10, 5]];
console.log(a1.map(e=>[...e.slice(0,4),e[3]-(a2.find(j=>j[1]===e[1])?.[4]??0)]));

【讨论】:

  • 你介意在这篇文章?.[4]??0) 上加一个词 2 吗?谢谢!
  • @onit 当然 - ?. 部分意味着如果 find 操作返回未定义,则当您尝试访问查找结果的 [4] 部分时不会抛出错误。相反,您将从查找中得到 undefined,??0 将任何 undefined 转换为 0 以指示没有要减去的内容。
  • @onit 顺便说一句,我刚刚意识到我可以使用.slice() 来避免e[0],e[1],e[2],e[3]
  • 虽然此代码 sn-p 可能是解决方案,但 including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而那些人可能不知道您提出代码建议的原因。
  • 一切都清楚了,@AndrewParks!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-14
  • 2021-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-30
  • 1970-01-01
相关资源
最近更新 更多