javascript 内循环问题

标签 javascript ecmascript-6

我正在尝试循环 3 个数组并生成一组具有唯一 ID 的子元素

但由于某种原因,属性 id 没有获得唯一值(请参阅控制台结果)

我尝试了各种方法,例如使用forEach、使用closures、使用局部变量。他们都没有工作。

const alpha = [{ name: 'AAA', value: 'a' }, { name: 'BBB', value: 'b' }, { name: 'CCC', value: 'c' }], 
	numeric = [{ name: 'ONE', value: '1' }, { name: 'TWO', value: '2' }, { name: 'THREE', value: '3' }], 
	symbol = [{ name: 'AT', value: '@' }, { name: 'HASH', value: '#' }, { name: 'DOLLAR', value: '$' }];

const result = alpha.map(a => {
  a.children = numeric.map(n => {
    n.children = symbol.map(s => {
      s.id = a.value + n.value + s.value;
      return s;
    });
    n.id = a.value + n.value;
    return n;
  });
  a.id = a.value;
  return a;
})


console.log(result[0].children[0].children[0].id)   // should be "a1@"
console.log(result[1].children[0].children[0].id)   // should be "b1@"
console.log(result[2].children[0].children[0].id)   // should be "c1@"

最佳答案

问题在于您正在修改输入对象,因此相同的(例如)s 被修改了多次。这就是为什么您只能在 ID 中看到最后一个 alphanumeric — 它们最后运行,因此也是最后修改共享对象的原因。

要解决此问题,请返回一个带有您的 ID 的对象,一切都会正常:

const alpha = [{ name: 'AAA', value: 'a' }, { name: 'BBB', value: 'b' }, { name: 'CCC', value: 'c' }], 
	numeric = [{ name: 'ONE', value: '1' }, { name: 'TWO', value: '2' }, { name: 'THREE', value: '3' }], 
	symbol = [{ name: 'AT', value: '@' }, { name: 'HASH', value: '#' }, { name: 'DOLLAR', value: '$' }];

const result = alpha.map(a => {
  a.children = numeric.map(n => {
    n.children = symbol.map(s => {
      return { ...s, id: a.value + n.value + s.value };
    });
    return { ...n, id: a.value + n.value };
  });
  return { ...a, id: a.value };
})


console.log(result[0].children[0].children[0].id)   // should be "a1@"
console.log(result[1].children[0].children[0].id)   // should be "b1@"
console.log(result[2].children[0].children[0].id)   // should be "c1@"

关于javascript 内循环问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54581539/

相关文章:

javascript - ES6 JavaScript 类

javascript - 将 json 转换为数组/映射

javascript - webpack imports-loader 到 window.variable

javascript - 最长重复子串函数的错误结果

javascript - ES6 NPM RollUp.Js 回调失败

javascript - React-Native不导入文件夹

javascript - 测试数组的每个元素是否为真

通过 JSNI 在 GWT 中实现类似 java.lang.reflect.Proxy 的功能

javascript - 如何在浏览器关闭时触发jQuery

javascript - 如何使用 node.js 抓取具有动态内容的页面?