javascript - 两道面试算法题:一个对象包含着两个数组(这两个数组有对应关系),现在要求写一个方法将这个两个数组整合成一个对象数组。
黄舟
黄舟 2017-04-11 11:55:45
[JavaScript讨论组]

例如一个这样的对象

var rs = {
    head: ["id", "name"], 
    data: [ [100, "Tom"], [101, "Jane"] ] 
};

经过一个方法处理后结果为:

arr = [
    {id: 100, name: "Tom"},
    {id: 101, name: "Jane"} 
]

还有另一题是:

将数据按照条件分类,例如:

//数据
var rs = {
    head: ["id", "name"], 
    data: [ [100, "Tom"], [101, "Jane"], [102, "Tom"] ] 
};

var result1=fun(rs,"name");
var result2=fun(rs,"id");
//结果
result1 = {
    "Tom": [{id: 100, name: "Tom"}, {id: 102, name: "Tom"}],
    "Jane": [{id: 101, name: "Jane"}]
}
result2 = {
    100: [{id: 100, name: "Tom"}],
    101: [{id: 101, name: "Jane"}],
    102: [{id: 102, name: "Tom"}]
}

可以使用jquery,想了很久没想出解决办法,希望有大神指点。

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(1)
迷茫

第一题:

var rs = {
    head: ["id", "name"], 
    data: [ [100, "Tom"], [101, "Jane"] ] 
};

console.log(JSON.stringify(normalize(rs)));

// 范式化,第二题会用到
function normalize (rs) {
    return rs.data.map(dataItem => 
        rs.head.reduce((itemResult, itemKey, curIndex) => 
            ((itemResult[itemKey] = dataItem [curIndex]), itemResult)
        , {})
    );
}

第二题:

var rs = {
    head: ["id", "name"], 
    data: [ [100, "Tom"], [101, "Jane"], [102, "Tom"] ] 
};

console.log(JSON.stringify(func(rs, 'id')));

console.log(JSON.stringify(func(rs, 'name')));

function func (rs, groupBy) {
  var normalizedData = normalize(rs);

  return normalizedData.reduce((ret, dataItem) => {
        var schemaKey = dataItem[groupBy]; 

        if (ret[schemaKey]) {
           ret[schemaKey].push(dataItem);
        } else {
           ret[schemaKey] = [dataItem];
        }

        return ret;
     }
  , {});
}

最后,提问和html没有什么关系,建议去掉html这个标签。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号