題目
寫(xiě)一個(gè) function,它遍歷一個(gè)對(duì)象數(shù)組(第一個(gè)參數(shù))并返回一個(gè)包含相匹配的屬性-值對(duì)(第二個(gè)參數(shù))的所有對(duì)象的數(shù)組。如果返回的數(shù)組中包含 source 對(duì)象的屬性-值對(duì),那么此對(duì)象的每一個(gè)屬性-值對(duì)都必須存在于 collection 的對(duì)象中。
例如,如果第一個(gè)參數(shù)是[{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }],第二個(gè)參數(shù)是{ last: "Capulet" }
,那么你必須從數(shù)組(第一個(gè)參數(shù))返回其中的第三個(gè)對(duì)象,因?yàn)樗俗鳛榈诙€(gè)參數(shù)傳遞的屬性-值對(duì)。
如果你被難住了,記得使用 Read-Search-Ask編寫(xiě)你自己的代碼。
這是一些對(duì)你有幫助的資源:
Global Object
Object.hasOwnProperty()
Object.keys()
function where(collection, source) {
var arr = [];
// What's in a name?
return arr;
}
where([{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }], { last: "Capulet" });
思路
- 我能說(shuō)這翻譯是shit嗎.....,屬性-值對(duì) 是什么鬼,看了5遍了沒(méi)看明白;
- 找來(lái)紙筆,畫(huà)了畫(huà),我的理解應(yīng)該是說(shuō),把source里的對(duì)象的每一個(gè)屬性(可能有多個(gè))以及屬性值去 collection 里找,如果找到了屬性,屬性值都相等的就返回給arr;
解答
function where(collection, source) {
var arr = [];
// What's in a name?
for(var i = 0;i < collection.length;i++){ //循環(huán)查找 collection
var p = true; //先定義一個(gè) 初始結(jié)果,每次返回的結(jié)果對(duì)這個(gè)初始值進(jìn)行修改;
for(var j in source){ // 循環(huán)source的每一個(gè)屬性
if (source[j] !== collection[i][j]){ //判斷source里的當(dāng)前屬性&屬性值是否在collection里不存在
p = false;
}
}
if( p === true){ // source循環(huán)結(jié)束之后,判斷 p 目前的值
arr.push(collection[i]); //將當(dāng)前的collection的屬性&屬性值加入 arr
}
}
return arr;
}
where([{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }], { last: "Capulet" });
- 可能是對(duì)題目的閱讀或者提示不太熟悉的原因,我現(xiàn)在的這種寫(xiě)法也能得出正確結(jié)果,提交的時(shí)候也通過(guò)了;
- 但題目的建議函數(shù)一個(gè)沒(méi)用上,可能用那些函數(shù)會(huì)更簡(jiǎn)單??
- 還要繼續(xù)努力學(xué)習(xí),如果發(fā)現(xiàn)了更高效的寫(xiě)法,再回頭來(lái)修正;