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