【问题标题】:Make a new array objects using two different object in JavaScript [closed]在 JavaScript 中使用两个不同的对象创建一个新的数组对象 [关闭]
【发布时间】:2022-01-15 00:48:13
【问题描述】:

我有两个对象。我正在尝试这样做:

var obj1 = {
 abc_name: "Jack", 
 abc_age: 24
}

var obj2 = {
 xyz_name: "Mike", 
 xyz_age: 22
}

预期输出如下:

var obj = [{
 fieldName: "Name", 
 abc_name: "Jack", 
 xyz_name: "Mike"
}, 
{
 fieldName: "Age", 
 abc_age: 24, 
 xyz_age: 22
}]

我正在尝试使用嵌套的 for-in 循环。但没有得到预期的结果。有更好的解决方案或想法吗?提前致谢

【问题讨论】:

  • 请添加您的方法。
  • 是的。我需要对象数组
  • 请显示你的 for-in 循环
  • 您的预期输出看起来仍然很不直观,这是正确的结果吗? fieldNames 来自哪里?它们似乎是硬编码的?
  • 是的。这就是我需要的。是的,fieldName 需要从属性名称中生成

标签: javascript arrays object for-in-loop


【解决方案1】:

实现此目的的一种方法是Array.prototype.map

const obj1 = {
 abc_name: "Jack", 
 abc_age: 24
}

const obj2 = {
 xyz_name: "Mike", 
 xyz_age: 22
}

const obj = Object.entries(obj1).map(([k, v]) => {
  const [, fieldname1] = k.split('_');
  const [prefix2] = Object.keys(obj2)[0].split('_');
  return {
    fieldname: fieldname1[0].toUpperCase() + fieldname1.substring(1),
    [k]: v,
    [prefix2 + '_' + fieldname1]: obj2[prefix2 + '_' + fieldname1]
  }
});

console.log(obj);

【讨论】:

  • 如果这确实回答了问题,请放下手来理解问题xD
【解决方案2】:

您可以按fieldName 分组并获取一组收集的键/值对。

const
    format = s => s[0].toUpperCase() + s.slice(1).toLowerCase(),
    obj1 = { abc_name: "Jack", abc_age: 24 },
    obj2 = { xyz_name: "Mike", xyz_age: 22 },
    result = Object.values([obj1, obj2].reduce((r, o) => {
        Object.entries(o).forEach(([k, v]) => {
            const fieldName = format(k.split('_')[1]);
            r[fieldName] ??= { fieldName };
            r[fieldName][k] = v;
        });
        return r;
    }, []));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-15
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 2021-06-07
    相关资源
    最近更新 更多