遍历对象数组并使用迭代值创建一个新对象

时间:2020-08-14 00:24:31

标签: javascript arrays object

第一次在这里发布,希望获得帮助,我似乎无法弄清楚如何解决此问题。基本上是要创建一个函数,该函数接收返回新对象的对象数组。

由于某种原因,push不会通过,并返回push的error属性未定义。

const organizeInstructors = function(instructors) {

  let output = {}; // so the obvious which is to create the object
  for (let i = 0; i < instructors.length; i++) {
    if (!output[instructors[course]]) {
      output[instructors[course]] = instructors[course];
    } else {
      output[instructors[course]].push(instructors[name]);
    }
  }
  return output;
};

console.log(organizeInstructors([{
    name: "Samuel",
    course: "iOS"
  },
  {
    name: "Victoria",
    course: "Web"
  },
  {
    name: "Karim",
    course: "Web"
  },
  {
    name: "Donald",
    course: "Web"
  }
]));

预期产量

{
  iOS: ["Samuel"],
  Web: ["Victoria", "Karim", "Donald"]
}

谢谢大家的建议或提示

3 个答案:

答案 0 :(得分:2)

看起来您在遍历数组和键入对象时有点困惑。

let organizeInstructors = function(instructors) {
let output = {}; // so the obvious which is to create the object
  for(let i = 0; i < instructors.length; i++) { 
    const instructor = instructors[i]
    if(!output[instructor.course]) { 
      output[instructor.course] = []
    }                                                   
    output[instructor.course].push(instructor.name)   
   }
return output;
}
console.log(organizeInstructors([
  {name: "Samuel", course: "iOS"},
  {name: "Victoria", course: "Web"},
  {name: "Karim", course: "Web"},
  {name: "Donald", course: "Web"}
]))

添加const instructor使其更易于阅读

答案 1 :(得分:0)

使用reduce

data = [ { name: "Samuel", course: "iOS" }, { name: "Victoria", course: "Web" }, { name: "Karim", course: "Web" }, { name: "Donald", course: "Web" }, ];
getObj = (data) =>
  data.reduce(
    (r, c) => (
      !r[c.course] // checks if accumulator doesn't have c.course as key  
        ? ((r[c.course] = []), r[c.course].push(c.name)) // then make an array that corresponds the key then push c.name
        : r[c.course].push(c.name), // else push c.name to the corresponding array 
      r
    ),
    {}
  );
console.log(getObj(data));

答案 2 :(得分:0)

这使用Array.prototype.reduce方法。

请注意,这不会检查课程数组中是否已经存在该值,而只会盲目添加。这可能意味着您在同一课程中获得了多个具有相同名称的实例。

const organizeInstructors = function(instructors) {
  return instructors.reduce((cumulative, current) => {
    // if we don't have a course in cumulative object, add it.
    if (!cumulative[current.course]) cumulative[current.course] = [];
    // add in the current name.
    cumulative[current.course].push(current.name);
    // return the cumulative object for the next iteration.
    return cumulative;
  }, {});
}
console.log(organizeInstructors([{
    name: "Samuel",
    course: "iOS"
  },
  {
    name: "Victoria",
    course: "Web"
  },
  {
    name: "Karim",
    course: "Web"
  },
  {
    name: "Donald",
    course: "Web"
  }
]));