Javascript 返回用户爱好所需的所有工具的列表

Javascript 返回用户爱好所需的所有工具的列表,javascript,lodash,Javascript,Lodash,对于lodash来说还是个新手,我正在尝试返回用户活动所需的所有工具的列表(“名称来自data.tools”) 常见的数据是“activites”和“tool”,因此我必须从usersTools返回每个工具的属性“name” var data = { users: [ { name: 'user1', email: 'user1@email.com', age: 'string', activites: [ 'photography', 'hiking', 'bikin

对于lodash来说还是个新手,我正在尝试返回用户活动所需的所有工具的列表(“名称来自data.tools”)

常见的数据是“activites”和“tool”,因此我必须从usersTools返回每个工具的属性“name”

var data = { 
   users: [
     { name: 'user1', email: 'user1@email.com', age: 'string', activites: [ 
   'photography', 'hiking', 'biking', 'sailing', 'relaxing' ] },

    { name: 'user2', email: 'user2@gmail.com', age: 15, activites: [ 'hiking', 'surviving', 'sewing', 'relaxing' ] },

    { name: 'user3', email: 'invalid mail', age: 10, activites: [ 'coding', 'hacking', 'relaxing' ] },

    { name: null, email: 'unregistered' }
  ],

  usersTools: [

    { name: 'hammer', tool: [ 'relaxing' ] },
    { name: 'camera', tool: [ 'photography' ] },
    { name: 'bike', tool: [ 'biking' ] },
    { name: 'keyboard', tool: [ 'hacking', 'coding' ] },
    { name: 'boat', tool: [ 'sailing' ] },
    { name: 'sail', tool: [ 'sailing' ] },
    { name: 'couch', tool: [ 'relaxing', 'hacking' ] },
    { name: 'tank', tool: [ 'nothing good' ] },
    { name: 'nuke', tool: [] },
    { name: 'backpack', tool: [ 'hiking' ] },
    { name: 'brain', tool: [ 'thinking' ] }
  ]
};

使用array.map和array.find可能不是非常有效或最佳:

var用户=[
{姓名:'user1',爱好:['摄影','徒步旅行','骑自行车','航海','放松']},
{name:'user2',爱好:['徒步旅行','生存','缝纫','放松']},
{name:'user3',爱好:['编码','黑客','放松']}
];
var usersTools=[
{name:'hammer',工具:['releasing']},
{name:'camera',工具:['photography']},
{name:'bike',工具:['biking']},
{name:'keyboard',工具:['hacking','coding']},
{名称:'船',工具:['航行]},
{名称:'sail',工具:['sailing']},
{name:'coach',工具:['releasing','hacking']},
{name:'tank',工具:['nothing good']},
{name:'nuke',工具:[]},
{名称:'背包',工具:['徒步旅行]},
{name:'brain',工具:['thinking']}
];
var user=users[0];
var tools=user.habiods.map(hobiody=>usersTools.find(tool=>tool.tool.indexOf(hobiody)!=-1)| | null);
tools=tools.filter(tool=>tool);//删除空值(如果有)
tools=tools.map(tool=>tool.name);

控制台日志(工具)
您可以使用
forEach
map
find
方法来获得所需的结果

var data={“users”:[{“name”:“user1”,“email”:”user1@email.com“,”年龄“:”字符串“,”爱好“:[”摄影“,”远足“,”自行车“,”帆船“,”放松“],{”姓名“:”用户2“,”电子邮件“:”user2@gmail.com“,“年龄”:15,“爱好”:[“徒步旅行”、“生存”、“缝纫”、“放松”]},{“姓名”:“用户3”、“电子邮件”:“无效邮件”、“年龄”:10,“爱好”:[“编码”、“黑客”、“放松”]}{“名称”:空,“电子邮件”:“未注册”}],“用户凳子”:[{“名称”:“锤子”,“工具”:[“放松”]},{“名称”:“照相机”,“工具”:[“摄影”]},{“名称”:“自行车”,“工具”:[“自行车”]},{“名称”:“键盘”,“工具”:[“黑客”,“编码”]},{“名称”:“船”,“工具”:[“航行”]},{“名称”:“帆”,“工具”:[“航行”]},{“名称”:“沙发”,“工具”:“放松”,“黑客”},{“坦克”{“名称”},{“坦克”},{“:[“没什么好”]},{“名字”:“核武器”,“工具”:[]},{“名字”:“背包”,“工具”:[“徒步旅行”]},{“名字”:“大脑”,“工具”:[“思考”]}
_.forEach(数据、用户、功能(e、i){
e、 嗜好=uu.map(例如嗜好,函数(a){
var name=uu.find(data.usersTools,(t)=>t.tool.includes(a));
返回名称?名称。名称:a
})
})
console.log(数据)