我有以下物件。
let obj = {
'app': ['placementId'],
'app2': ['siteId'],
'app3': ['channel_id'],
};
function search(y) {
return Object.keys(obj).filter((x, id, arr) => {
console.log(obj['app'][0]) // returns 'placementId'
if (x == y) {
return obj[y][0] // returns ['app']
}
})
};
let result = search('app');
console.log(result);
我真的不明白為什么函式回傳 ['app'] 而不是placementId,就像它在console.log 陳述句中所做的那樣。謝謝!
uj5u.com熱心網友回復:
Filter不像你想的那樣作業。return obj[y][0]不會['app']像您的評論所說的那樣回傳。.filter做。
Filter 接受一個陣列,并將保留或丟棄內部的每個元素,具體取決于您是否回傳true或false(或至少是“真實”或“虛假”)。在這里,您從['app', 'app2', 'app3']過濾器內部開始,您return obj['app'][0],即['placementId']。這東西“真實”(意思是,不是假/空/未定義),所以'app'被保留,其余的被丟棄。起始陣列是['app', 'app2', 'app3'],過濾后的陣列是['app']。
你想要做的事情可以簡單地通過這種方式完成:
let obj = {
'app': ['placementId'],
'app2': ['siteId'],
'app3': ['channel_id'],
};
const search = y => obj[y][0];
let result = search('app');
console.log(result);
uj5u.com熱心網友回復:
您應該回傳obj[x]or obj[y],因為當您傳遞Obj[key]它時,它會給出值。你試圖給出錯誤的輸出。
let obj={
'app': ['placementId'],
'app2': ['siteId'],
'app3': ['channel_id'],
};
function search(y){
return Object.keys(obj).filter((x, id, arr)=> {
if(x===y) {
console.log(x,y); //gives out 'app app'
console.log(obj[x]); //gives out [placementId]
console.log(obj[x][0]); //gives out placementId
return obj[y]
}
})
};
console.log(search('app')); //filter will only give that item (out of multiple), where conditions matched, so output is 'app' (in the item out of all, where condition matched);
uj5u.com熱心網友回復:
因為過濾器回呼回傳布林值來過濾陣列。如果你想先按鍵查找,它應該是這樣的:
let obj={
'app': ['placementId'],
'app2': ['siteId'],
'app3': ['channel_id'],
};
function search(y){
return obj[Object.keys(obj).find((x)=> x === y)][0];
};
search('app');
在當前情況下不需要使用過濾器功能:
function search(y){
return obj[y][0]
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/394594.html
標籤:javascript 目的
