对象数组上的find()只找到第一个值,而不是特定的对象?

时间:2018-03-15 02:41:33

标签: javascript arrays object

我有一个包含4个对象的数组,用于填充下拉菜单。每次我更改菜单时,都应该使用下拉菜单的值并使用lat和long映射位置。

我使用find方法搜索数组,但它只返回数组中第一个对象的值,无论选择什么。有什么帮助吗?

var MagicKingdom = {description: "Magic Kingdom Park", latitude: 28.417713, 
     longitude: -81.581206}
var Epcot = {description: "Epcot", latitude: 28.374786, longitude: 
     -81.549396}
var AnimalKingdom = {description: "Disney's Animal Kingdom Theme Park", 
     latitude: 28.359792, longitude: -81.591316}
var HollywoodStudios = {description: "Disney's Hollywood Studios'", 
     latitude: 28.357568, longitude: -81.558275}

var populate = document.getElementById("locationSelect");
var locations = [MagicKingdom, Epcot, AnimalKingdom, HollywoodStudios];

var locationSelection = function(){
    var selected = document.getElementById("locationSelect");
    console.log(selected.value);
    var svalue = function(){
        return selected.value;
    }

    console.log(svalue());

    var locationSelected = locations.find(svalue);
    console.log(locationSelected.description);
}

以下是返回值:

p2.js:42 Magic Kingdom Park
p2.js:47 Magic Kingdom Park
p2.js:50 Magic Kingdom Park



p2.js:42 Epcot
p2.js:47 Epcot
p2.js:50 Magic Kingdom Park

因此selectedValue和svalue正确更新,但不是locationSelected。

1 个答案:

答案 0 :(得分:0)

find方法接受一个参数,该参数表示正在搜索的数组的元素,如果元素与相关条件匹配(在您的情况下,则为element.description == selected.value),则返回true。它的工作方式是find为每个数组元素调用提供的函数,传入并获取结果。只要结果为真(或" truthy"),它就会返回元素。所以试试这个:

var svalue = function(el){
    return el.description === selected.value;
}