Giter Club home page Giter Club logo

Comments (13)

Tcdian avatar Tcdian commented on June 4, 2024 1
function setOfUsersWithSimillarSkills(userToSkill) {
    const userToSkillEntries = Object.entries(userToSkill);
    return userToSkillEntries.reduce((prevSkillToUser, [user, skills]) => {
        skills.forEach((skill) => {
            if (prevSkillToUser.hasOwnProperty(skill)) {
                prevSkillToUser[skill].push(user);
            } else {
                prevSkillToUser[skill] = [user];
            }
        });
        return prevSkillToUser;
    }, {});
}

from fe-interview.

azl397985856 avatar azl397985856 commented on June 4, 2024 1

参考答案:

function transform(userToSkill) {
  const skillToUser = {};
  for (const k in userToSkill) {
    userToSkill[k].forEach(skill => {
      if (skillToUser[skill] === void 0) {
        skillToUser[skill] = [k];
      } else {
        skillToUser[skill].push(k);
      }
    });
  }

  return skillToUser;
}

扩展:

function backtrack(list, tempList, nums, start) {
  list.push(intersect(...tempList));
  for(let i = start; i < nums.length; i++) {
      tempList.push(nums[i]);
      backtrack(list, tempList, nums, i + 1);
      tempList.pop();
  }
}
/**
* @param {number[]} nums
* @return {number[][]}
*/
function subsets(nums) {
  const list = [];
  backtrack(list, [], nums, 0);
  return list;
};

function intersect(arr1, ...rest) { 
  const set = new Set();
  if (rest.length === 0) return set;
  const s1 = new Set(arr1);
  const restSet = rest.map(a => new Set(a));
  for (const x of s1) {
    if (restSet.every(s => s.has(x))) {
      set.add(x);
    }
  }
  return set;
}
function maxByLength(list) {
  let max = 0;
  let maxIndex = 0;

  for(let i = 0; i < list.length; i++) {
    if (list.length > max) {
      max = list.length;
      maxIndex = i;
    }
  }
  return list[maxIndex];
}

function setOfUsersWithSimillarSkills(userToSkill) {
  const mapper = transform(userToSkill);
  const sets = subsets(Object.values(mapper).filter(q => q.length > 1));
  const list = sets.map(set => Array.from(set)).filter(q => q.length);
  return maxByLength(list)
}

from fe-interview.

woohs avatar woohs commented on June 4, 2024
function demo(userToSkill) {
    let obj = {}
    for(let item in userToSkill) {
        userToSkill[item].forEach(i => {
            if(obj[i]) {
                obj[i].push(item)
            }else {
                obj[i] = [item]
            }
        })
    }
	return obj
}

from fe-interview.

azl397985856 avatar azl397985856 commented on June 4, 2024
function demo(userToSkill) {
    let obj = {}
    for(let item in userToSkill) {
        userToSkill[item].forEach(i => {
            if(obj[i]) {
                obj[i].push(item)
            }else {
                obj[i] = [item]
            }
        })
    }
	return obj
}
  1. 注意命名
  2. 虽然技能不大可能出现falsy的值。但是最好还是可以严谨一点

from fe-interview.

hjx5309 avatar hjx5309 commented on June 4, 2024
function setOfUsersWithSimillarSkills(userToSkill) {
   const skillToUser ={};
   const keylist = Object.entries(userToSkill);
   
   keylist.foreach(item=>{
     let [key,value] = item;
     value.foreach(obj=>{
      skillToUser[obj]?skillToUser[obj].push(key):skillToUser[obj]=[key]
     })
   })
   return skillToUser
}

from fe-interview.

HEternally avatar HEternally commented on June 4, 2024
function setUserToSkill(userToSkill){
	let skillToUser = {};
	for (let [key,value] of Object.entries(userToSkill)) {
		value.forEach(skill=>{
			skill in skillToUser ?  skillToUser[skill].push(key) : skillToUser[skill] = Array.of(key);
        });
    }
  return skillToUser;
}

from fe-interview.

azl397985856 avatar azl397985856 commented on June 4, 2024
function setUserToSkill(userToSkill){
	let skillToUser = {};
	for (let [key,value] of Object.entries(userToSkill)) {
		value.forEach(skill=>{
			skill in skillToUser ?  skillToUser[skill].push(key) : skillToUser[skill] = Array.of(key);
        });
    }
  return skillToUser;
}

里面的let都是没有必要的。

from fe-interview.

azl397985856 avatar azl397985856 commented on June 4, 2024
function setOfUsersWithSimillarSkills(userToSkill) {
   var skillToUser ={};
   var keylist = Object.entries(userToSkill);
   
   keylist.map(item=>{
     let [key,value] = item;
     value.map(obj=>{
      skillToUser[obj]?skillToUser[obj].push(key):skillToUser[obj]=[key]
     })
   })
   return skillToUser
}
  1. 注意格式化
  2. 尽量使用const,而不是var,
  3. 这里的map是没有必要的

from fe-interview.

MujunZ avatar MujunZ commented on June 4, 2024
const transform = userToSkill => 
  Object.entries(userToSkill).reduce((skillToUser, [user, skills]) => 
    skills.reduce((skillToUser, skill) =>({
      ...skillToUser,
      [skill]: skillToUser[skill] ? skillToUser[skill].concat(user) : [skill]
    }), skillToUser), {})

from fe-interview.

MujunZ avatar MujunZ commented on June 4, 2024

@azl397985856 backtrack 那个没看懂。能不能讲一讲?

from fe-interview.

azl397985856 avatar azl397985856 commented on June 4, 2024

@azl397985856 backtrack 那个没看懂。能不能讲一讲?

仓库里面很多这种回溯法解题的,你可以参考一下。 比如 subsets问题

from fe-interview.

azl397985856 avatar azl397985856 commented on June 4, 2024

closed by #6

from fe-interview.

DevilRoshan avatar DevilRoshan commented on June 4, 2024

参考答案:

function transform(userToSkill) {
  const skillToUser = {};
  for (const k in userToSkill) {
    userToSkill[k].forEach(skill => {
      if (skillToUser[skill] === void 0) {
        skillToUser[skill] = [k];
      } else {
        skillToUser[skill].push(k);
      }
    });
  }

  return skillToUser;
}

扩展:

function backtrack(list, tempList, nums, start) {
  list.push(intersect(...tempList));
  for(let i = start; i < nums.length; i++) {
      tempList.push(nums[i]);
      backtrack(list, tempList, nums, i + 1);
      tempList.pop();
  }
}
/**
* @param {number[]} nums
* @return {number[][]}
*/
function subsets(nums) {
  const list = [];
  backtrack(list, [], nums, 0);
  return list;
};

function intersect(arr1, ...rest) { 
  const set = new Set();
  if (rest.length === 0) return set;
  const s1 = new Set(arr1);
  const restSet = rest.map(a => new Set(a));
  for (const x of s1) {
    if (restSet.every(s => s.has(x))) {
      set.add(x);
    }
  }
  return set;
}
function maxByLength(list) {
  let max = 0;
  let maxIndex = 0;

  for(let i = 0; i < list.length; i++) {
    if (list.length > max) {
      max = list.length;
      maxIndex = i;
    }
  }
  return list[maxIndex];
}

function setOfUsersWithSimillarSkills(userToSkill) {
  const mapper = transform(userToSkill);
  const sets = subsets(Object.values(mapper).filter(q => q.length > 1));
  const list = sets.map(set => Array.from(set)).filter(q => q.length);
  return maxByLength(list)
}
function maxByLength(list) {
  let max = 0;
  let maxIndex = 0;

  for(let i = 0; i < list.length; i++) {
    if (list[i].length > max) {
      max = list[i].length;
      maxIndex = i;
    }
  }
  return list[maxIndex];
}

from fe-interview.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.