老师有道面试题不会做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回答

双越

2018-10-18

思路:先创建一个 hash = {} 空对象,然后对 rs.d 进行遍历,其中 Tom 和 Jane 就是 hash 的属性。属性值的获得,就和之前你提的那个面试题一样了。

要试着自己去写。

0
0

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))


0
1
慕仰5016471
好吧,我明白啦
2019-09-03
共1条回复

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 {};
}


0
0

BAT大牛带你横扫初级前端JavaScript面试(第二版)

BAT高级前端工程师亲授,结合真实面试题,提高面试成功几率

4268 学习 · 817 问题

查看课程