JavaScript-当前对象键中的新嵌套对象

时间:2018-07-03 15:35:35

标签: javascript arrays

当使用如下对象时,基于当前对象的键构建新对象的最有效方法是什么?键用作对其在新对象中的位置的引用-activityName1等于新name嵌套数组的第一个元素activitiesactivityName2等于到数组的第二个元素name等。

const obj = {
  activityName1: "Bingo",
  activityName2: "Bazinga",
  activityType1: "Dog",
  activityType2: "Term",
  description: "Games are fun.",
  name: "Patty"
};

所需对象:

const newObj = {
  activities: [
   {name: "Bingo", type: "Dog"},
   {name: "Bazinga", type: "Term"}
  ],
  description: "Games are fun.",
  name: "Patty"
};

我最初的想法是使用reduceObject.assign,但是构建新对象仅返回一个键/值对:

Object.keys(variables).reduce((obj, key) => {
  if (key.includes('activity')) {
    return Object.assign(obj, {
     [key[key.length - 1]]: { activities: { [key]: variables[key] } } });
  }
  return obj;
}, {});

产生一个新的activities数组,例如:

[
  1: {activities: {type: "Dog"},
  2: {activities: {type: "Term"}
]

1 个答案:

答案 0 :(得分:2)

映射的唯一用途是查找以activityName开头的键,并使用它们来构建activities的数组。您可以重用将activityName替换为activityType的键来获取关联的类型。

const obj = {
  activityName1: "Bingo",
  activityName2: "Bazinga",
  activityType1: "Dog",
  activityType2: "Term",
  description: "Games are fun.",
  name: "Patty"
};

var result = {
   activities: Object.keys(obj).filter(k => k.startsWith("activityName")).map(k => ({
       name: obj[k],
       type:obj[k.replace("activityName","activityType")]
   })),
   description: obj.description,
   name: obj.name
}

console.log(result);