老师有道面试题不会做2
来源:17-1 异步和单线程-什么是异步
yjw123
2018-10-18
var rs = {
h: ["id", "name"],
d: [ [100, "Tom"], [101, "Jane"], [102, "Tom"] ]
};
var hash = rs2MultiHash(rs, "name");
// 结果为
hash = {
"Tom": [{id: 100, name: "Tom"}, {id: 102, name: "Tom"}],
"Jane": [{id: 101, name: "Jane"}]
};
rs2MultiHash()怎么实现
写回答
3回答
-
思路:先创建一个 hash = {} 空对象,然后对 rs.d 进行遍历,其中 Tom 和 Jane 就是 hash 的属性。属性值的获得,就和之前你提的那个面试题一样了。
要试着自己去写。
00 -
zhenweiVV
2019-08-19
function rs2MultiHash(rs){ const {h,d } = rs let hash = {} for(let i = 0 ; i < d.length; i++){ let _key = d[i][1] let _list = [] if(!hash[_key]){ d.forEach((item) => { let obj = {} if(_key === item[1]){ obj[h[0]] = item[0] obj[h[1]] = item[1] _list.push(obj) } }) hash[_key] = _list } } return hash } console.log(rs2MultiHash(rs))012019-09-03 -
chris_kong
2019-08-01
function rs2MultiHash(rs, key) { const { h, d } = rs; const hash = {}; const index = h.indexOf(key); if (index != -1) { const nameArr = [...new Set(d.map(item => item[1]))]; // name 集合 const idArr = [...new Set(d.map(item => item[0]))]; // id 集合 let arr = index === 0 ? idArr : nameArr; arr.forEach(item => { if (!hash[item]) { hash[item] = []; d.forEach(item1 => { if (item1[index] === item) { hash[item].push({ id: item1[0], name: item1[1] }) } }) } }); return hash; } return {}; }00
相似问题