2017-07-15 60 views
-2

我有對象的數組:JavaScript函數可以CONSOLE.LOG值,但不會返回它

let array = [ 
    { 
    id: 0, 
    name: "Name0" 
    }, 
    { 
    id: 1, 
    name: "Name1" 
    } 
] 

和功能,通過數組迭代,搜索對象具有指定ID屬性,而應返回對象名稱屬性:

function getName1(id) { 
    array.map((object) => { 
    if(object["id"] === id) 
     return object["name"] 
    }) 
} 

但是這個代碼

console.log(getName1(0)) // undefined 

回報不確定

如果我只是CONSOLE.LOG對象的名稱在函數內部

function getName2(id) { 
    array.map((object) => { 
    if(object["id"] === id) 
     console.log(object["name"]) 
    }) 
} 

它工作完全正常:

getName2(0) // "Name1" 

我基本上只是想

getName1(0) 

返回

Name0 

我該如何做到這一點?

+0

請僅使用合適的標籤。這與[tag:asynchronous]或[tag:undefined]無關,可以說與[tag:return]無關。 –

+0

您的函數getName1不返回任何內容。 return語句不在getName1函數中。你需要迭代數組來尋找匹配,然後返回該值。我不認爲地圖是你想要的。查看減少或只是迭代數組 – terpinmd

回答

1

問題是您的return聲明從map回調中返回,而不是從getName1返回。

根本不應該使用map,它的工作是根據回調的返回值創建一個新的數組。

相反,使用Array#find,其任務是尋找到給定的回調函數返回一個truthy值數組中的第一項,然後返回找到的條目中是否有任何name屬性:

function getName1(id) { 
    const entry = array.find(object => object.id === id); 
    return entry && entry.name; 
} 

還是在ES5和更早版本(我用ES2015 +上面,因爲你用一個箭頭功能):

function getName1(id) { 
    var entry = array.find(function(object) { return object.id === id; }); 
    return entry && entry.name; 
} 

entry && entry.name部分的意思是「如果entry是truthy,返回entry.name;否則,返回entry(虛假值)本身。「在這種情況下,如果找不到條目(因爲這是Array#find在條目未找到時返回的內容)或name找到的條目,將返回null

+0

非常感謝!我完全「忘記」我正在使用地圖..有時你只是在一段時間後失明,我猜:) 如果我理解正確,那麼得到我想要的東西的「老派」方式就是循環數組('for(let i = 0; i Skilla123

+0

@ Skilla123:是的,這的確是另一種方式來做到這一點。 –

相關問題