| 2.Record Collection嚴格來講,這不是一道非常難的題,把題目要求看清楚,就能寫出代碼。原題鏈接
 我對題目的翻譯:
 給你的是一個表示音樂專輯集合的一部分json對象,每一個專輯有幾個屬性和作為它的key的唯一的ID,不是所有的專輯都有完整的信息。
 寫一個函數(shù),這個函數(shù)帶有專輯的ID,一個屬性和一個屬性值,去改變這個集合, 
如果屬性不是tracks,并且值不為空,更新這個值到集合對應(yīng)的屬性注意:你的函數(shù)需要返回集合對象
下面是一些處理不完整數(shù)據(jù)的規(guī)則 
如果屬性是tracks,但是集合沒有tracks屬性,在添加新值到專輯對應(yīng)屬性之前,創(chuàng)建一個空數(shù)組如果屬性是tracks和值不為空,添加數(shù)據(jù)到專輯已經(jīng)存在的tracks數(shù)組末尾如果值是空,從專輯里刪除被給的屬性 代碼方案如下: function updateRecords(id, prop, value) {
    if (prop === 'tracks' && value !== '') {
        if (collectionCopy[id][prop]) {    //判斷集合是否有這個屬性
            collectionCopy[id][prop].push(value);    //有的話,直接push到末尾
        } else {    //沒有的話創(chuàng)建一個新的數(shù)組,將數(shù)組賦值給屬性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;
}
 3.Symmetric Difference這道題考察的是咱們的高中數(shù)學(xué)知識,但我把名詞忘了,但是不要緊,我們知道這道題的重點就是不斷去重,A和B去重,得到的結(jié)果和C去重,依次類推。 function sym(args) {
    //前半段得到參數(shù)數(shù)組,后半段使用 Set 集合得到去重的參數(shù)數(shù)組)
    var newArgs = Array.prototype.slice.call(arguments).map(function(item) {
        return Array.from(new Set(item));
    });;
    // 封裝方法——得到2個數(shù)組去重之后的數(shù)組
    function diff(arr1, arr2) {
        // 連接兩個數(shù)組,并給數(shù)組按照從小到大的順序排序
        var newArr = arr1.concat(arr2).sort(function(a, b){
            return a - b;
        });
        // 新數(shù)組去重
        for (var i = 0; i < newArr.length; i++) {
            if (newArr[i] === newArr[i + 1]) {
                delete newArr[i];
                delete newArr[i + 1];
            }
        }
        // 過濾空元素
        /*return newArr.filter(function(item) {
            return item !== '';
        });*/
        return newArr.filter(Boolean);//這里可以優(yōu)化一下
    }
    // 遍歷參數(shù)數(shù)組,得到最終的去重數(shù)組
    for (var i = 0; i < newArgs.length-1; i++) {
        newArgs[i+1]= diff(newArgs[i],newArgs[i+1]);
    }
    return newArgs[newArgs.length-1];
}
 |