美文网首页freeCodeCamp
Record Collection solution

Record Collection solution

作者: 董懂同学 | 来源:发表于2017-07-12 21:32 被阅读28次

严格来讲,这不是一道非常难的题,把题目要求看清楚,就能写出代码。
原题链接
我对题目的翻译:
给你的是一个表示音乐专辑集合的一部分json对象,每一个专辑有几个属性和作为它的key的唯一的ID,不是所有的专辑都有完整的信息。

写一个函数,这个函数带有专辑的ID,一个属性和一个属性值,去改变这个集合,

  • 如果属性不是tracks,并且值不为空,更新这个值到集合对应的属性
    注意:你的函数需要返回集合对象
  • 下面是一些处理不完整数据的规则
  1. 如果属性是tracks,但是集合没有tracks属性,在添加新值到专辑对应属性之前,创建一个空数组
  2. 如果属性是tracks和值不为空,添加数据到专辑已经存在的tracks数组末尾
  3. 如果值是空,从专辑里删除被给的属性

完整代码如下:

var collection = {
    2548: {
        album: "Slippery When Wet",
        artist: "Bon Jovi",
        tracks: [
            "Let It Rock",
            "You Give Love a Bad Name"
        ]
    },
    2468: {
        album: "1999",
        artist: "Prince",
        tracks: [
            "1999",
            "Little Red Corvette"
        ]
    },
    1245: {
        artist: "Robert Palmer",
        tracks: []
    },
    5439: {
        album: "ABBA Gold"
    }
};
var collectionCopy = JSON.parse(JSON.stringify(collection));

function updateRecords(id, prop, value) {
    if (prop === 'tracks' && value !== '') {
        if (collectionCopy[id][prop]) {    //判断集合是否有这个属性
            collectionCopy[id][prop].push(value);    //有的话,直接push到末尾
        } else {    //没有的话创建一个新的数组,将数组赋值给属性prop。
            var arr = [];
            arr.push(value);
            collectionCopy[id][prop] = arr;
        }
    } else if (value === '') {    //值为空时候,删除这个属性
        delete collectionCopy[id][prop];
    } else {    //值不为空,属性也不是track,将值赋给属性
        collectionCopy[id][prop] = value;
    }
    return collectionCopy;
}
//注意在网页端运行时候,去掉console.log();
console.log(updateRecords(5439, "tracks", "Take a Chance on Me"));

相关文章

网友评论

  • 花痴书:说实话研究了半天,感觉有些一知半解,懂了大概的意思,可是让我自己写,我不知道写不写的出来。
    我是在FCC上面自学这个,学到这一关了,看到你给的链接是英文的,我看的是中文的。
    我是刚开始,不过总感觉这个没有系统的教程和循序渐进的方式,感觉有些不知所以啊
    花痴书:okay,我有在看了,自从这个问题之后我就怀疑我的方法不对,最近也在YouTube上面找了一个课程(https://www.youtube.com/watch?v=Vwg7BaPBK-Y)在看,觉得先囫囵吞枣的先整体视频一遍。
    然后呢……找课题做,目前是这样计划的
    董懂同学:这个教程是 learning by doding 和项目驱动的,有时候会让人觉得自己学的只是1+1,但到了算法和项目是9*9的难度,你可以配合慕课网的前端路径(http://www.imooc.com/course/programdetail/pid/32)学,把freecodecamp 作为练手的地方。另外,FCC只是一个途径,不是全部,你需要一些参考资料:https://www.zhihu.com/question/47059559,余博伦的回答总结的很好。

本文标题:Record Collection solution

本文链接:https://www.haomeiwen.com/subject/ltrihxtx.html