javascript嵌套forEach,typeError

标签 javascript arrays for-loop foreach ecmascript-6

我正在执行双重 forEach,但在尝试重建另一个对象时出现类型错误:

const users = [
    {teacher: [
        {file: 'chemistry', size: '2MB'},
        {file: 'math', size: '1MB'}]
    }, {student: [
        {file: 'chemistry', size: '3MB'},
        {file: 'math', size: '4MB'}]
    }
];

let final = {};

users.forEach(function(i) {

    i.forEach(function(j){
        let filesizestring = 'newfilesize'+j.size;
        final[j] = j;
        final.j[j.file] = filesizestring;
    })
})

预期的结果是:

{teacher: {
        chemistry: 'newfilesize2MB',
        math: 'newfilesize1MB'
    }, 
student: {
        chemistry: 'newfilesize3MB',
        math: 'newfilesize4MB'
    }
}

有人可以帮我解决这个问题吗?

更新

如果嵌套 forEach 是不可能的,我怎样才能达到相同的结果?

最佳答案

你在 i -> i.forEach(function(j) 上执行循环,但是,i 是一个对象,所以你需要循环对象键值对使用 for (key in i) 并且对于每个 key 获取数组如下 i[key]

const users = [{
  teacher: [{
      file: 'chemistry',
      size: '2MB'
    },
    {
      file: 'math',
      size: '1MB'
    }
  ]
}, {
  student: [{
      file: 'chemistry',
      size: '3MB'
    },
    {
      file: 'math',
      size: '4MB'
    }
  ]
}];

let final = {};

users.forEach(function(i) {
  for (key in i) {
    var obj = {};
    i[key].forEach(function(j) {
      let filesizestring = 'newfilesize' + j.size;
      obj[j.file] = filesizestring;
    });
    final[key] = obj;
  }
});

console.log(final);

希望对您有所帮助!

关于javascript嵌套forEach,typeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48384247/

相关文章:

c++ - 冒泡排序忽略数组的第一个元素

javascript - 通过将 $resource 查询数组添加到 AngularJS 中另一个数组的底部来进行分页加载

javascript - 无法使用 JavaScript 切换表单

c# - PointF[] 数组中的最大值和最小值

c - 在没有 int i = 0 的情况下循环做某事 n 次?

arrays - 访问嵌套数组中的值

javascript - Onclick简单的JS菜单。我需要一些建议

javascript - 如何让window.open(url)不在弹出窗口中

javascript - 最简单的手卷排列组合

python - 如何用(python)列表中的顺序替换数字