繁体   English   中英

创建嵌套 Object 数组 Javascript

[英]Create nested Object Array Javascript

我在 json 下面有一个课程列表。 我试图获得所需的 output 来制作我想要的阵列,但我在制作新阵列时遇到了问题。

我正在尝试使用下面的代码片段来获取它,但它显示使用[courses[i].client_id]的错误result

 let courses = [ {course_id: 1, name: "Test1", description: "Test1 desc", video_url: "111", client_id: 1}, {course_id: 3, name: "A new course", description: "This is a temporary description used to test functionality. ", video_url: "https://vimeo.com/", client_id: 1}, {course_id: 5, name: "Teaching", description: "programming language", video_url: "https://vimeo.com", client_id: 1}, {course_id: 13, name: "Course285", description: "desc285", video_url: "", client_id: 2}, {course_id: 16, name: "The NEW", description: "The Course is an training", video_url: "https://vimeo.com/", client_id: 1} ] let result = []; for (let i = 0; i < courses.length; i++) { if (courses && courses.length) { result[i][courses[i].client_id] = { clientId: courses[i].client_id }; } }

预计 Output

[
    {client_id: 1, courses:[{
        course_id:1,
        course_name: Test1,
        course_desc: description
    },{
        course_id:2,
        course_name: Test1,
        course_desc: description
    }]},
    {client_id:2,courses[{
        ....
    }]}
]

我的减少案例:

const userCourses = courses.reduce((acc, rec) => {
  const user = acc.find(a=>a.client_id === rec.client_id)
  if (user) {
    user.courses = [...user.courses, {course_id:rec.course_id, course_name: rec.name, course_desc: rec.description}]
    return [...acc]
  }
  return [...acc, { client_id: rec.client_id, courses: [{course_id: rec.course_id, course_name: rec.name, course_desc: rec.description}] }]
}, [])

在操场上见: https://jscomplete.com/playground/s538993

我对此的看法:

courses
  .map(course => course.client_id)
  .filter((val, idx, arr) => arr.indexOf(val) === idx)
  .map(clientId => ({
    client_id: clientId,
    courses: courses
      .filter(course => course.client_id === clientId)
      .map(course => ({
        course_id: course.course_id,
        course_name: course.name,
        course_desc: course.description
      }))
  }))

 let courses = [{ course_id: 1, name: "Test1", description: "Test1 desc", video_url: "111", client_id: 1 }, { course_id: 3, name: "A new course", description: "This is a temporary description used to test functionality. ", video_url: "https://vimeo.com/", client_id: 1 }, { course_id: 5, name: "Teaching", description: "programming language", video_url: "https://vimeo.com", client_id: 1 }, { course_id: 13, name: "Course285", description: "desc285", video_url: "", client_id: 2 }, { course_id: 16, name: "The NEW", description: "The Course is an training", video_url: "https://vimeo.com/", client_id: 1 } ] let result = {} courses.map(course => { let newCourse = { course_id: course.course_id, course_name: course.name, course_desc: course.description } result[course.client_id]? result[course.client_id].courses.push(newCourse): result[course.client_id] = { client_id: course.client_id, courses: [newCourse] } }) let output = Object.values(result) console.log(output)

 const courses = [ { course_id: 1, name: 'Test1', description: 'Test1 desc', video_url: '111', client_id: 1 }, { course_id: 3, name: 'A new course', description: 'This is a temporary description used to test functionality. ', video_url: 'https://vimeo.com/', client_id: 1 }, { course_id: 5, name: 'Teaching', description: 'programming language', video_url: 'https://vimeo.com', client_id: 1 }, { course_id: 13, name: 'Course285', description: 'desc285', video_url: '', client_id: 2 }, { course_id: 16, name: 'The NEW', description: 'The Course is an training', video_url: 'https://vimeo.com/', client_id: 1 } ] const output = courses.reduce((output, course) => { const { client_id, course_id, name, description } = course; const client = () => output.find(client => client.client_id == client_id); (client() || output.push({ client_id, courses: [] }) && client()).courses.push({ course_id, course_name: name, course_desc: description }); return output; }, []); console.log(output);

let courses = [
  {
    course_id: 1, 
    name: "Test1", 
    description: "Test1 desc",
    video_url: "111", 
    client_id: 1
  },
  {
    course_id: 3, 
    name: "A new course", 
    description: "This is a temporary description used to test functionality. ", 
    video_url: "https://vimeo.com/", 
    client_id: 1
  },
  {
    course_id: 5, 
    name: "Teaching", 
    description: "programming language", 
    video_url: "https://vimeo.com", 
    client_id: 1
  },
  {
    course_id: 13, 
    name: "Course285", 
    description: "desc285", 
    video_url: "", 
    client_id: 2
  },
  {
    course_id: 16, 
    name: "The NEW", 
    description: "The Course is an  training", 
    video_url: "https://vimeo.com/", 
    client_id: 1
  }
]

const arr = courses.reduce((acc, obj) => {
  const accObj = acc.find(e => e.client_id == obj.client_id);
  const courseObj = {
    course_id: obj.course_id, 
    course_name: obj.name, 
    course_desc: obj.description
  };
  if (accObj) {
    accObj.courses = [...accObj.courses, courseObj];
    return acc
  }
  return [...acc, { client_id: obj.client_id, courses: [courseObj] }];
}, []);

console.log(arr);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM