javascript - 如何将一个对象属性值指定为另一个对象属性?

标签 javascript arrays object for-in-loop

我有以下 JavaScript 代码:

const data = {
  columnFields: {
    columnField1: 'FieldValue1',
    columnField2: 'FieldValue2',
    columnField3: 'FieldValue3',
  },

  dataSets: [
    {
      columnProp1: 'value1',
      columnProp2: 'value2',
      columnProp3: 'value3',
    },
    {
      columnProp1: 'value11',
      columnProp2: 'value22',
      columnProp3: 'value33',
    },
  ],
};

我希望看到此数据的以下输出:

const expectedOutput = [
  {
    FieldValue1: 'value1',
    FieldValue2: 'value2',
    FieldValue3: 'value3',
  },
  {
    FieldValue1: 'value11',
    FieldValue2: 'value22',
    FieldValue3: 'value33',
  },
];

我尝试了以下解决方案

function processData() {
  const processDataSet = [];
  const obj = {};
  data.dataSets.forEach((item) => {
    for (const key in item) {
      const element = item[key];
      for (const prop in data.columnFields) {
        obj[data.columnFields[props]] = element;
      }
    }
    processDataSet.push(obj);
  });

  return processDataSet;
}

这给了我以下输出,这不是我想要的:

const output = [
  {
    FieldValue1: 'value33',
    FieldValue2: 'value33',
    FieldValue3: 'value33',
  },
  {
    FieldValue1: 'value33',
    FieldValue2: 'value33',
    FieldValue3: 'value33',
  },
];

这符合预期,因为每次它都会覆盖该值并以最后一个值结束。请帮助我确定代码的方向,通过它我可以同时在循环中分配单独的值。

最佳答案

  • 使用Object#valuescolumnFields上,您可以获得要在结果对象数组中使用的键列表
  • 使用Array#map ,迭代dataSets
  • 在每次迭代中,使用 Object#values获取当前对象的值列表。使用Array#reduce ,迭代后者以创建一个具有首先计算的键和当前值的对象

const data = {
  columnFields: { columnField1: 'FieldValue1', columnField2: 'FieldValue2', columnField3: 'FieldValue3' },
  dataSets: [
    { columnProp1: 'value1', columnProp2: 'value2', columnProp3: 'value3' },
    { columnProp1: 'value11', columnProp2: 'value22', columnProp3: 'value33' }
  ]
};

const { columnFields, dataSets } = data;
const keys = Object.values(columnFields);
const res = dataSets.map(e => 
  Object.values(e).reduce((acc, value, index) => ({
    ...acc,
    [keys[index]]: value
  }), {})
);

console.log(res);

关于javascript - 如何将一个对象属性值指定为另一个对象属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71849502/

相关文章:

javascript - 除非单击提交按钮,否则离开页面警报

c - 在 C 中使用指针和 malloc 的两个暗淡数组中的运行时错误

javascript - Internet Explorer 8 上的正则表达式

javascript - 从 Javascript 中的嵌套对象创建字符串路径

javascript - Bluebird promise 可以在完成之前进行GC吗?

javascript - 如何在不重新加载页面的情况下更改src

javascript - 如何给文本区域自动滚动

c# - 在C#中计算不规则多边形的面积

javascript - 值未保存到数组中

javascript - 访问javascript对象中的变量