【问题标题】:Traversing Arrays by forEachforEach 遍历数组
【发布时间】:2022-01-14 17:11:00
【问题描述】:

尝试使用键/对将数组遍历到对象中(是的,我知道 reduce):

这是数组:

filtered2 = [["deviceName", "TestDevice00003"], ["hwModelName", "TestHwModel03"], ["deviceTypeName", "TestDeviceType03"], ["serviceTag", "A1A03"]]

但出于某种原因,当我执行 forEach 时:

filtered2.forEach( (indiv) => {
  console.log([indiv[0]]+" | " +[indiv[1]])
    obj3 = {
      ...obj3,
      [[indiv[0]][0]]  : [indiv[1]]
    }
})

Console.log 将每个 (indiv) 视为“hwModelName | TestHwModel03” 在[indiv[0]]+" | " +[indiv[1]],所以都是基本字符串

但 forEach 函数将 [indiv[1]] 视为 Array ["TestHwModel03"] 所以我必须再深入一级[indiv[1]][0] 到数组中才能得到解包的字符串“TestHwModel03”

为什么会有这种差异?

【问题讨论】:

  • [indiv[0]]+" | " +[indiv[1]]array + string + array。使用indiv[0] + " | " + indiv[1]
  • [indiv[0]] 创建一个新数组。这真的是你想做的吗?我希望您只想访问indiv[0]
  • 至于为什么[indiv[0]]+" | " +[indiv[1]] 会给你预期的结果 - 你需要阅读type coercion

标签: javascript arrays


【解决方案1】:

删除值周围的方括号。

filtered2 = [["deviceName", "TestDevice00003"], ["hwModelName", "TestHwModel03"], ["deviceTypeName", "TestDeviceType03"], ["serviceTag", "A1A03"]]

let obj3 = {}

filtered2.forEach( (indiv) => {
    obj3 = {
      ...obj3,
      [indiv[0]]  : indiv[1]
    }
})

console.log(obj3)

虽然使用Object.fromEntries要简单得多:

filtered2 = [["deviceName", "TestDevice00003"], ["hwModelName", "TestHwModel03"], ["deviceTypeName", "TestDeviceType03"], ["serviceTag", "A1A03"]]

let obj3 = Object.fromEntries(filtered2)
console.log(obj3)

【讨论】:

  • [indiv[0]]: indiv[1] 可以正常工作。
  • @lafleur 感谢您的建议!我已经更新了我的答案。
【解决方案2】:

您可以在数组上使用 reduce 方法将数组转换为映射。或者,如果您的环境支持最新版本的 ES2017,您可以使用 Object.fromEntries

filtered2 = [
  ["deviceName", "TestDevice00003"],
  ["hwModelName", "TestHwModel03"],
  ["deviceTypeName", "TestDeviceType03"],
  ["serviceTag", "A1A03"],
];
const toMap = (arr = []) =>
  arr.reduce((acc, [key, value]) => {
    acc[key] = value;
    return acc;
  }, {});

console.log(toMap(filtered2))

/// Other way
console.log(Object.fromEntries(filtered2))

【讨论】:

    猜你喜欢
    • 2013-12-16
    • 2014-07-31
    • 1970-01-01
    • 2012-06-21
    • 2016-04-06
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    相关资源
    最近更新 更多