【问题标题】:Mapping an array inside a loop在循环内映射数组
【发布时间】:2019-12-11 18:10:15
【问题描述】:

我需要在循环中分配一个对象。 这是我的代码:


let dataObj = {}
let dataArr = []
 ,    temp = []

while ( i < file.length ) {
  array[i].forEach(item => temp.push(item))

  dataObj.name = temp[0]
  dataObj.nim = temp[1]

  dataArr.push(dataObj)

  temp = []
  i++
}

预期输出:

// dataArr = [{name: panji, nim: 123}, {name: gifary, nim: 234}]

现实:

// dataArr = [{name: gifary, nim: 234}, {name: gifary, nim: 234}]

我不确定如何才能正确执行此操作。有人知道路吗?

感谢您的帮助!

【问题讨论】:

  • 您没有映射数组。你只是在滥用.map,而不是像.forEach这样更合适的东西。
  • 它给出了与.forEach相同的结果
  • 你能显示你正在迭代的初始数组吗?
  • 那么,您的意见是什么?除非我们知道您操作的数据是什么,否则输出错误是没有意义的。可能是您正在反向执行此操作,您可能需要向后迭代或 unshift 而不是 push

标签: javascript arrays loops for-loop while-loop


【解决方案1】:

您正面临参考问题。当你推送到数组时,通过引用设置的对象将导致相同的数据,因为它的相同对象具有不同的变量名

while ( i < file.length ) {
  array[i].forEach(item => temp.push(item))
  // use new object instead
  let dataObj = {name: temp[0], nim: temp[1]};

  dataArr.push(dataObj)

  temp = []
  i++
}

改为创建新对象或使用此克隆您的对象

let newObj = JSON.parse(JSON.stringify(dataObj);

【讨论】:

    【解决方案2】:

    dataObj 是对同一对象的引用。您可以在不使用变量的情况下做到这一点:

      dataArr.push({
         name: temp[0],
         nim : temp[1]
      })
    

    【讨论】:

    • 很高兴为您提供帮助,最可能的原因是问题中缺少信息,例如输入内容。因此,在问题更完整之前,任何答案都将被视为猜测。
    猜你喜欢
    • 2018-12-10
    • 2020-01-31
    • 2020-11-21
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 2020-12-05
    相关资源
    最近更新 更多